小野田?
スクレイピング・クローリングをする前に html,css,HTTPリクエスト・レスポンス, 正規表現の基礎知識が必要なので ない人は事前に習得しておく必要がある(各用語のリンクレベルの知識で一応OK)
スクレイピングをやるときに必要なUnixの文字列・ファイル操作系コマンドを示す.
スクレイピングを兎に角やりたい人は後半の具体的な手順へ
unix cat,grep,cut,sed,awkと正規表現で出来る
・ページをダウンロードできる
wget URL
・ページを出力(ダウンロードではない)
curl URL
1.sed
sed s/置換ルール/置換文字/ sed s/dog/cat/ dog ➡︎ cat
https://msdn.microsoft.com/ja-jp/library/Cc392020.aspx
・抽出要素の行数を出力
wc -l
・巨大なデータファイルを分割
head tillコマンドを使う
head tailコマンドの後に>>filenameでfilenameに出力結果書き込み
・ファイルマージ a,bに共通な行を抜きだす
cat a b | sort | uniq -d > common
・textディレクトリ下のwikiと名のファイルをwiki.txtにマージ
$ find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'
・aにだけ含まれる行を抜き出す
cat a b | sort | unit > all cat a all | sort | uniq -u > only_in_a
・バイナリ文字列を含むファイルをutf-8でそろえる
nkf -w --overwrite wiki_wakati.txt
・2つのファイルを連結
cat file_a file_b > merge.txt
http://masa-cbl.hatenadiary.jp/entry/20121202/1354456802 大まかな手順 ・webページのデータ取得fetch ・scrape htmlから正規表現で書籍のデータを抜き取る ・save sqlite等のデータベース保存
Pythonでやる場合 フレームワーク scrapy htmlパーサー ・BeautifulSoup4 httpライブラリ ・requests urlにアクセス可 ・lxml urlアクセスライブラリと併用? ・urllib系 今はrequestsが主流?
ヘッドレスブラウザ プログラムを用いてブラウザ操りたいときに使おう!seleniumとセットで使おう phantomjs jsで記述 dom,node.js対応 js組み込みサイトのスクレイピングに有用 ghost pythonで記述 詳細不明
pip install beautifulsoup4 (beautifulsoupだけだと旧バージョンになるので注意) pip install lxml pip install requests
javascriptが入ったページをスクレイピングしたい場合はPhantomJsとseleniumuの組み合わせが必要
基本的なことはこちら を見ればわかる
ちなみに上サイトは非効率なやり方で行っているので本格運用する場合はこの本もしくはこの本を読むことをオススメする
ちなみにBeautifulSoup4を使う場合内部で使うParserをlxmlに設定すると高速に解析できる
まずどこでオーバーヘッドが発生しているかで以下の対策が取れる
上のものほどソフトウェア的であり, 下に行くほどハードウェアの問題となる
プログラム内部の処理を高速化したい場合はマルチスレッド・マルチプロセスに対応させる必要があるマルチスレッドは一つのコアで複数の処理を同時に行うことで マルチプロセスは複数のコアで並列にプログラムを処理させることである 例えば8コアのCPUの場合で2マルチスレッド, 8マルチプロセスだと 2(プロセスあたりのスレッド数)× 8(コア数) = 16となり 16個並列にプログラムが動いてることになる
やり方は各言語によって違うので各々調べるべし 例: JavaであるとThreadクラスを使う, Pythonならthreadingモジュールとmultiproccessingモジュールがある
データをwebから収集するレスポンスが遅い場合は非同期処理により待ち時間を有意義に使うことができる 詳しくはこちら
Pythonだとfor文の代わりにリスト内包記法を使うなどプログラムの記述によって 処理速度が多少変わる
プログラミング言語により速度が変わるので
単純にPCのスペックが低い可能性がある. 指導教員に相談しよう