May 09, 2007
■ Web::Scraper
Today I've been thinking about what to talk in YAPC::EU (and OSCON if they're short of Perl talks, I'm not sure), and came up with a few hours of hacking with web-content scraping module using Domain Specific Languages.
Journal of miyagawa (1653)
使ってみたよ!
#!/usr/local/bin/perl use strict; use warnings; use FindBin::libs; use URI; use Web::Scraper; use Encode; use List::MoreUtils qw/uniq/; my $links = scraper { process 'a.keyword', 'keywords[]' => 'TEXT'; result 'keywords'; }->scrape(URI->new(shift)); print encode('euc-jp', $_), "\n" for uniq @$links;
% perl scrape.pl http://d.hatena.ne.jp/hatenadiary/ | head -5 asterisk techno goth プロフィール アイコン
おおお miyagawa++。次いで http://d.hatena.ne.jp/secondlife/20060922/1158923779 にある Scrapi での例を Web::Scraper でやってみる。
#!/usr/local/bin/perl use strict; use warnings; use FindBin::libs; use URI; use Web::Scraper; use Encode; use YAML; my $links = scraper { process 'span.title > a:first-child', title => 'TEXT', url => '@href'; process 'span.furigana', furigana => 'TEXT'; process 'ul.list-circle > li:first-child > a', category => 'TEXT'; result qw/title furigana url category/ }->scrape(URI->new(shift)); warn encode('euc-jp', YAML::Dump($links));
% perl keyword_scraper.pl http://d.hatena.ne.jp/keyword/%BA%B0%CC%EE%A4%A2%A4%B5%C8%FE --- category: アイドル furigana: こんのあさみ title: 紺野あさ美 url: /keyword/%ba%b0%cc%ee%a4%a2%a4%b5%c8%fe?kid=800
ばっちりですね。シンボルの書き方とかがちょっと違うところ以外は Ruby 版とほぼ等化。DSL 周りのドキュメントはまだないけどとりあえず scrapi のドキュメントを読めば ok! \(^o^)/
中の実装は HTML::TreeBuilder::Xpath + HTML::Selector::XPath で Xpath、シンボルテーブル hack で Perl DSL。HTTP::Response::Encoding が内蔵されてて取りに行く文字列の文字エンコーディングを気にしないでもいいのがささりげなくクライアントに優しい。ていうかコード短かいなあ、グレイト。
トラックバック - http://d.hatena.ne.jp/naoya/20070509/1178686816
- http://d.hatena.ne.jp/textfile/20070510
- http://d.hatena.ne.jp/fbis/20070510
- http://d.hatena.ne.jp/hakobe932/20070510
- Web::Scraper 使い方(超入門)
- http://d.hatena.ne.jp/Watson/20070719
- Web::ScraperでCISCO RECORDSをスクレーピング
- http://d.hatena.ne.jp/akkt/20070911
- http://d.hatena.ne.jp/tetsuarossa/20070913
- Overlasting::Hatena - Web::Scraperの入門記事が多数
- satoshipのPerl日記 - 参照
- satoshipのPerl日記 - Web::Scraperをコマンドラインで使ってみた
- IT四重奏 - Web::ScraperとWWW::Mechanize
- Perl ! まずはラクダを目指す日記 - キーワードを抽出してくるスク...
- makotoworldのはてなダイアリー - Web::Scraperってすごい件
- fedora9のPerlメモ - [cpan]Web::Scraper
- 武蔵の日記 - Starbucks??Ź?޸???饹???쥤?&...
リンク元
- 1096 http://alphabloggers.com/modules/news/article.php?storyid=5
- 1096 http://en.yummy.stripper.jp/?eid=555416
- 698 http://reader.livedoor.com/reader/
- 534 http://b.hatena.ne.jp/hotentry
- 439 http://www.google.co.jp/search?q=Web::Scraper&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&client=firefox
- 396 http://d.hatena.ne.jp/hakobe932/20070510/1178783882
- 344 http://blog.cles.jp/item/2003
- 344 http://www.google.co.jp/ig?hl=ja
- 325 http://d.hatena.ne.jp/fbis/20070510/1178783909
- 303 http://blog.codezine.jp/editor/2007/10/webscraper.php
