小野田?

基本事項 

スクレイピング・クローリングをする前に html,css,HTTPリクエスト・レスポンス, 正規表現の基礎知識が必要なので ない人は事前に習得しておく必要がある(各用語のリンクレベルの知識で一応OK)

Unix環境でのスクレイピング 

スクレイピングをやるときに必要な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に設定すると高速に解析できる

高速化したい場合 

まずどこでオーバーヘッドが発生しているかで以下の対策が取れる

上のものほどソフトウェア的であり, 下に行くほどハードウェアの問題となる

CPUバウンドの場合 

プログラム内部の処理を高速化したい場合はマルチスレッド・マルチプロセスに対応させる必要があるマルチスレッドは一つのコアで複数の処理を同時に行うことで マルチプロセスは複数のコアで並列にプログラムを処理させることである 例えば8コアのCPUの場合で2マルチスレッド, 8マルチプロセスだと 2(プロセスあたりのスレッド数)× 8(コア数) = 16となり 16個並列にプログラムが動いてることになる

やり方は各言語によって違うので各々調べるべし 例: JavaであるとThreadクラスを使う, Pythonならthreadingモジュールとmultiproccessingモジュールがある

IOバウンド 

データをwebから収集するレスポンスが遅い場合は非同期処理により待ち時間を有意義に使うことができる 詳しくはこちら

書き方の問題 

Pythonだとfor文の代わりにリスト内包記法を使うなどプログラムの記述によって 処理速度が多少変わる

言語の問題 

julia_benchmark.jpeg

プログラミング言語により速度が変わるので

スペックの問題 

単純にPCのスペックが低い可能性がある. 指導教員に相談しよう


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS