トップページ > windows > WEBから情報の抜き出し(スクレイピング、スパイダリング)

「トップページ/windows/WEBから情報の抜き出し(スクレイピング、スパイダリング)」の編集履歴(バックアップ)一覧に戻る

トップページ/windows/WEBから情報の抜き出し(スクレイピング、スパイダリング) - (2013/07/07 (日) 06:45:57) のソース

#html2(){{{{{{
<TABLE align="right">
<TR>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as1&m=amazon&f=ifr&md=1X69VDGQCMF7Z30FM082&asins=4873111870" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

</TD>
</TR>
<TR>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873115132" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

</TD>
</TR>
</TABLE>
}}}}}}
最終更新日時&date()
■目次
#contents_line()
&link_edit(text=ここを編集) 

■本文

*スクレイピング(scraping)とは
>Webページから、利用者が必要としている情報を選択的に収集する技術です。スクレイピング(scraping)とは削ることの意味ですが、先の例で言えば株価を掲載しているWebページからレイアウトや色と言った付随的な情報を削り取り、必要な文字(数値)情報だけを取り出します。
引用元:[[Web情報のオートメーション化を行うWebスクレイピング:これからはコレ! 会社情報  コベルコシステム株式会社 >http://www.kobelcosys.co.jp/company/itwords/scraping.html]]

**スクレイピングの他の呼び方
・スパイダリング(web Spidering)
・WEBデータマイニング(Web Data Mining)
・Web Harvesting←日本ではあまり使わない。らしい。

#html2(){{{{{{
<TABLE align="right">
<TR>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774133531" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

</TD>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774137871" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</TD>
</TR>
</TABLE>
}}}}}}
**スクレイピングの使用例
・yahooファイナンスから、社名とファンダメンタルを1000社分抜きだして一覧表にしたいとき。
→ただし、こういった株の相場を扱うパターンは、色々なサイトがあり、本も出ている。まさにこれをしたいならば、本買うのが一番早い。
例として2冊のリンクだけ貼っておく。


*スクレイピングを始める前に必ず知っておきたいこと
**逮捕されてしまうことがある
>短時間に無数のアクセスをして更新データを取得しようとするのは、DoS攻撃と同じになる
>スクレイピング業者がサイト側から彼らの財産侵害(trespass to chattels)をしてるとして訴えられるリスク
>この辺のリスクは、巡回頻度をコントロールすることで回避できる
>引用元:[[Audrey Watters「大規模データのスクレイピング、クリーニング、マネタイズ」 - クライアント・サイド・スクリプティング with Web Standards >http://d.hatena.ne.jp/vwxyz/20110512/1305176641]]

***実際の事件:岡崎図書館事件(librahack事件)
[[Librahackメモ | Librahack : 容疑者から見た岡崎図書館事件 >http://librahack.jp/okazaki-library-case-season2/librahack-memo.html]]
[[クローラ作者の逮捕とエンジニアの不安――“librahack事件”まとめ - はてなブックマークニュース >http://b.hatena.ne.jp/articles/201009/1696]]

**サイトにアクセスできなくなることがある
サイトの利用規約をよく読みましょう。スクレイピングが禁止されている場合や、制限が設けられている場合も多々あります。サイトの利用規約を読まずに、プログラムでアクセスすると、ブラウザからでさえサイトにアクセスできなることがあります。
***実際の体験:googleが使えなくなりそうになりました。
[[勉強用メモ - トップページ/windows/microsoft office/EXCEL/VBA/エクセルWEB連携(応用を中心に:google検索など) >http://www42.atwiki.jp/tomokazu0525/pages/41.html]]


*スクレイピングの文字列指定方法
**プログラム言語×文字列の指定方法(正規表現、XPATH、CSSセレクタ)

||正規表現|XPATH|CSSセレクタ|その他|
|RUBY|||||
|java|||||
|javascript|||||
・
・

動かすのは、色々なプログラム言語のうち一つを選べばよい。
しかし、文字列の指定方法は、複数を組み合わせた方が、より正確なスクレイピングができる。
例えば、正規表現だけを使うよりも、正規表現とXPATHの両方を使ったほうが、より正確にスクレイピングできる。

つまり、最低限のスクレイピングをする上では、
プログラム言語一つと、文字列の指定方法1つの計2つの考え方を学べばよいが、
より正確なスクレイピングをするためには、それに加えて文字列の指定方法を複数学ぶ必要がある。


**XPATH
***XPATHを取得する方法
[[Chromeだけで任意のノードのXPathを簡単に取得 たぶん革命 - nrm://lab.kss.inc - Petittech >http://ptech.g.hatena.ne.jp/noromanba/20120528/1338307299]]

[[XPath取得支援 - feedpalette >http://feedpalette.appspot.com/xpathsupport]]

関連リンク:[[javascriptでXPathを使いたいと思っています。 「HTMLをクリック.. - 人力検索はてな >http://q.hatena.ne.jp/1304257365]]


**正規表現
正規表現だけで本がかけてしまうので、使いかたの詳細は本を。
***関連リンク
[[図解でみる正規表現入門 >http://funcchan.blog16.fc2.com/]]
[[VBAで正規表現を使う(2/3):CodeZine >http://codezine.jp/article/detail/1655?p=2]]

**CSSセレクタ
不明。


*スクレイピングのやり方(言語別)

対象となるサイトに以下のポイントがひとつ含まれているごとに難易度はあがる。
・cookieを使う
・ログインが必要
・XMLではなく、ただのHTML
上記3点とも満たしていて、あなたがド素人なら即外注した方がいいと思う。


以下、すでに何かの言語が扱える人向けに言語別のスクレイピング方法。
初心者でも時間がありあまっている人もどうぞ。


**■PERLによるスクレイピング
他のページにて編集中。
[[ 勉強用メモ - トップページ/windows/プログラミング/言語/perl/スクレイピング >http://www42.atwiki.jp/tomokazu0525/pages/192.html]]



**■RUBYによるスクレイピング
[[進化する“Webスクレイピング”技術の世界 - @IT >http://www.atmarkit.co.jp/news/200702/20/scrubyt.html]]
コメント:2007/02/20の記事。

[[Ruby Scraping - FrontPage >http://route477.net/rubyscraping/]]

[[ rubyでスクレイピングまとめ >http://fromnorth.blogspot.com/2008/04/ruby.html]]サイト名:北から南や西を見て思うこと:

[[日経電子版をスクレイピングしてKindle向けmobiファイルを作る - ただのにっき(2011-01-04) >http://sho.tdiary.net/20110104.html#p01]]
[[ScraperWikiをためしてみよう | ScraperWiki Data Blog >http://blog.scraperwiki.com/2012/01/06/scraperwiki%E3%82%92%E3%81%9F%E3%82%81%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/]]
[[ScraperWiki を使って勝手 RSS フィードしてみた - 私と私の猫の他は誰でも隠し事を持っている >http://d.hatena.ne.jp/Mariyudu/20110903/1315037137]]

**■PHPによるスクレイピング
[[スクレイピング 基本 | WEBプログラム覚書 >http://www.kantenna.com/pg/2010/03/php_9.php]]
[[phpによるスクレイピング処理入門 >http://www.usamimi.info/~ryouchi/scraping/index.html]]
[[phpによるスクレイピング処理入門:8. 例3.Googleのもしかしてを取得する方法 >http://www.usamimi.info/~ryouchi/scraping/08.html]]
googleの検索結果に対してスクレイピングかけると、googleを使用できなくなってしまうことがあるので、これを実行していいのかどうかは自分で追加調査の上、判断してください。
[[     htmlSQLでプロ野球速報をWebスクレイピングして携帯のフルブラウザで見られるようにする実験    ゼロと無限の間に    >http://0-oo.net/sbox/php-tool-box/html-sql-baseball-news]]
[[RedLine Magazine : htmlSQL すごかった。感動した。 >http://redline.hippy.jp/lab/php/htmlsql.php]]
[[Webスクレイピングを可能にするPHPライブラリ・htmlSQL - かちびと.net >http://kachibito.net/software/htmlsql.html]]

[[PHPでのスクレイピングに役立つライブラリ - (DxD)∞ >http://dxd8.com/archives/85/]]
[[ScraperWikiをためしてみよう | ScraperWiki Data Blog >http://blog.scraperwiki.com/2012/01/06/scraperwiki%E3%82%92%E3%81%9F%E3%82%81%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/]]
[[tidyでHTMLのパースを実現したい - PHPプロ!Q&A掲示板 >http://www.phppro.jp/qa/303]]

[[  誰でもスクレイピング!DOM要素を引っこ抜くSimple HTML Dom-ITかあさん >http://www.kaasan.info/archives/1457]]

**■javascript(jscript)によるスクレイピング

[[node.jsとjQueryでスクレイピングするウェブアプリの作り方 | さくらたんどっとびーず 2011/02/01 >http://sakuratan.biz/archives/3393]]
[[サーバサイドJavaScriptとjQueryでスクレイピング | さくらたんどっとびーず 2011/01/08>http://sakuratan.biz/archives/2972]]

[[株価を無料で取得したり、検索結果を得るスクリーン・スクレイピング技術(AJAX版)と問題点 - ウィリアムのいたずらの開発日記 >http://blog.goo.ne.jp/xmldtp/e/625be225495dcb649161d9a3c09d6816]]
[[JavaScriptで外部サイトをスクレイピング【Cross-Domain-Ajax】JavaScriptプログラムメモ|プログラムメモ >http://logic.moo.jp/memo.php/archive/759]]
[[  JavaScriptのお勉強 スクレイピングのお遊び » simple blog >http://www.simple-sys.com/blog/2008/03/13/41/]]



**■pythonによるスクレイピング
[[第3回 スクレイピングにチャレンジ! - 基礎からはじめるPython:ITpro >http://itpro.nikkeibp.co.jp/article/COLUMN/20080407/298191/]]
[[BeautifulSoup、Mechanizeでおいしくデータをすする -- PythonによるWebスクレイピング - 蟲!虫!蟲! - #!/usr/bin/bugrammer  >http://bugrammer.g.hatena.ne.jp/nisemono_san/20111204/1322932616]]
[[BeautifulSoup実践 -pythonで超カンタンにスクレイピング - lolloo-htnの日記 >http://d.hatena.ne.jp/lolloo-htn/20090128/1233155734]]
[[ScraperWikiをためしてみよう | ScraperWiki Data Blog >http://blog.scraperwiki.com/2012/01/06/scraperwiki%E3%82%92%E3%81%9F%E3%82%81%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/]]


**■VB、VBAによるスクレイピング
対象となるサイトがXMLなら簡単にできる。
HTMLなら苦労するので、他の言語に切り替えたほうがいいと思う。
(VBAで、HTMLを対象としてXPATHを使うには、結局、javascriptもある程度理解している必要があるので。)
[[他のページに詳細あり - エクセルWEB連携 >http://www42.atwiki.jp/tomokazu0525/pages/18.html]]

**■Haskellによるスクレイピング
[[Haskellの入門がてら、はてなブックマークを簡易スクレイピングする。 - 蟲!虫!蟲! - #!/usr/bin/bugrammer  >http://bugrammer.g.hatena.ne.jp/nisemono_san/20110922/1316706716]]

**ScalaによるWebスクレイピング
[[ScalaでWebスクレイピングしようとしたメモ - Scala覚書 >http://www.mwsoft.jp/programming/scala/web_scraping.html]]

**その他、未精査

***Yahoo! Pipes
[[Yahoo Pipesでスクレイピング ポイントはRenameとRegex: Non-engineer's PAPA-tronix ! >http://weed.cocolog-nifty.com/wzero3es/2009/06/yahoo-pipesrena.html]]
[[Yahoo! Pipesのテクニックを10個(前編): uessay >http://goodsite.cocolog-nifty.com/uessay/2008/08/yahoo_pipes10_594f.html]]
[[【RSS】 Yahoo! Pipes 【スクレイピング】 >http://hibari.2ch.net/test/read.cgi/esite/1226394877/]]
[[Yahoo! Pipes の Page Fetch モジュールでスクレイピングし放題 - てっく煮ブログ >http://d.hatena.ne.jp/nitoyon/20071212/pipes_page_fetch]]

***Dapper 
[[DapperでJリーグ公式記録をRSSに(途中): uessay >http://goodsite.cocolog-nifty.com/uessay/2008/08/dapperjrss_3a67.html]]
[[『Dapper』を使ってRSS化されていないページの特定データを抽出する。 - HAAYA >http://haaya.net/2282]]
[[Dapper : The Data Mapper [K'conf] >http://kenz0.s201.xrea.com/weblog/2007/03/dapper_the_data_mapper.html]]
[[Feedmedia: Dapper - あらゆるウェブサイトを構造化して再利用できるようにするサービス >http://feedmedia.blogspot.com/2007/03/dapper.html]]

***Junar
[[Junar · Discovering Data >http://www.junar.com/portal/HomeManager/actionQuery]]


***IDE「Web-Harvest」
[[MOONGIFT: » スクレイピングIDE「Web-Harvest」:オープンソースを毎日紹介 >http://www.moongift.jp/2007/10/web-harvest/]]

***ScraperWiki
[[スクレイピングするなら『ScraperWiki』使うといいよ - ガジェット通信 >http://getnews.jp/archives/125534]]
[[ScraperWikiをためしてみよう | ScraperWiki Data Blog >http://blog.scraperwiki.com/2012/01/06/scraperwiki%E3%82%92%E3%81%9F%E3%82%81%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/]]
[[ScraperWiki を使って勝手 RSS フィードしてみた - 私と私の猫の他は誰でも隠し事を持っている >http://d.hatena.ne.jp/Mariyudu/20110903/1315037137]]

***WebView(Androidのwebブラウザコンポーネント)
[[WebViewを使ったスクレイピング / scraping a page using the WebView in a Service - keigoiの日記 - Android 開発コミュニティ >http://android.g.hatena.ne.jp/keigoi/20100211/1265892976]]
[[北から南や西を見て思うこと: WebViewを使ったスクレイピングの使い道 >http://fromnorth.blogspot.com/2010/02/webview.html]]
[[androidでスクレイピングを練習 - たぶんこれからもエンジニア >http://d.hatena.ne.jp/o2mana/20100530/1275226733]]

***Groovy
[[Groovyでスクレイピングしてみる - No Programming, No Life >http://npnl.hatenablog.jp/entry/20090329/1238319223]]
[[Groovyでスクレイピングしてみる(NekoHTML編) - No Programming, No Life >http://npnl.hatenablog.jp/entry/20090428/1240929966]]


***その他
勉強になりそうな会合発見。
[[   データマイニング+WEB 勉強会@東京 (Tokyo.Webmining) |   Google Groups    >http://groups.google.com/group/webmining-tokyo]]

[[ROBO-IE >http://ieunit.sourceforge.jp/]]


&mobile(){&amazon(4844333844,text,image)}

#html2(){{{{{{
<TABLE>
<TR>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as1&m=amazon&f=ifr&md=1X69VDGQCMF7Z30FM082&asins=4873111870" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

</TD>
</TR>
<TR>
<TD>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873115132" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

</TD>
<TD><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tomokazu0525-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4844333844" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></TD>
</TR>
</TABLE>
}}}}}}

*ページフッタ
**このページの1階層上のページ
&link_parent() 
**このページの1階層下のページ
#lsd()
**このページに含まれるタグ
&tags()
**このページへのアクセス数
今日:&counter(today)
昨日:&counter(yesterday)
これまで合計:&counter(total)


&link_edit(text=ここを編集)