小野田? bs4の便利なリンク https://qiita.com/itkr/items/513318a9b5b92bd56185
スクレイピング・クローリングをする前に html,css,HTTPリクエスト・レスポンス, 正規表現の基礎知識が必要なので ない人は事前に習得しておく必要がある(各用語のリンクレベルの知識で一応OK)
スクレイピングをやるときに必要なUnixの文字列・ファイル操作系コマンドを示す.
スクレイピングを兎に角やりたい人は後半の具体的な手順へ
unix cat,grep,cut,sed,awkと正規表現で出来る
・ページをダウンロードできる
wget URL
・ページを出力(ダウンロードではない)
curl URL
・コマンドをtxtに吐き出す
(any command) > file.txt
・複数のコマンドをつなげるパイプ
cat file.txt | grep apple
*ちなみに上はcatでファイルを出力して,その結果からappleという単語をgrepで検索している
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
・fetch webページのデータ取得
・scrape htmlから正規表現で書籍のデータを抜き取る
・save sqlite等のデータベース保存
フレームワーク
・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のスペックが低い可能性がある. 指導教員に相談しよう