スクレイピング・クローリング入門
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[小野田]]
bs4の便利なリンク
https://qiita.com/itkr/items/513318a9b5b92bd56185
**基本事項 [#v096f46e]
スクレイピング・クローリングをする前に
[[html,css>https://liginc.co.jp/web/html-css/html/122500]...
ない人は事前に習得しておく必要がある(各用語のリンクレベ...
**Unix環境でのスクレイピング [#r384be49]
スクレイピングをやるときに必要なUnixの文字列・ファイル操...
スクレイピングを兎に角やりたい人は後半の具体的な手順へ
***基本の基本 [#nb6e49a6]
unix cat,grep,cut,sed,awkと正規表現で出来る
・ページをダウンロードできる
wget URL
・ページを出力(ダウンロードではない)
curl URL
・コマンドをtxtに吐き出す
(any command) > file.txt
・複数のコマンドをつなげるパイプ
cat file.txt | grep apple
*ちなみに上はcatでファイルを出力して,その結果からappleと...
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" >> wik...
・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
***大まかな手順 [#h7aa199a]
・fetch webページのデータ取得
・scrape htmlから正規表現で書籍のデータを抜き取る
・save sqlite等のデータベース保存
***Pythonでやる場合 [#j7e43002]
フレームワーク
・scrapy
htmlパーサー
・BeautifulSoup4
httpライブラリ
・requests urlにアクセス可
・lxml urlアクセスライブラリと併用?
・urllib系 今はrequestsが主流?
ヘッドレスブラウザ
プログラムを用いてブラウザ操りたいときに使おう!selenium...
phantomjs jsで記述 dom,node.js対応 js組み込みサイトのス...
ghost pythonで記述 詳細不明
*具体的な手順 [#gbb2e441]
***必要モジュールのインストール [#b5ab8091]
pip install beautifulsoup4 (beautifulsoupだけだと旧バー...
pip install lxml
pip install requests
javascriptが入ったページをスクレイピングしたい場合はHeadl...
基本的なことは[[こちら>http://gci.t.u-tokyo.ac.jp/tutoria...
を見ればわかる
ちなみに上サイトは非効率なやり方で行っているので本格運用...
[[この本>http://gihyo.jp/book/2017/978-4-7741-8367-1]]
もしくは[[この本>https://www.shoeisha.co.jp/book/detail/9...
を読むことをオススメする
ちなみにBeautifulSoup4を使う場合内部で使うParserをlxmlに...
**高速化したい場合 [#r77de9f8]
まずどこでオーバーヘッドが発生しているかで以下の対策が取...
上のものほどソフトウェア的であり, 下に行くほどハードウェ...
やり方は各言語によって違うので各々調べるべし
例: JavaであるとThreadクラスを使う, Pythonならthreadingモ...
***IOバウンド [#gfd26a8f]
データをwebから収集するレスポンスが遅い場合は非同期処理に...
詳しくは[[こちら>https://vaaaaaanquish.hatenablog.com/ent...
***書き方の問題 [#a854d24e]
Pythonだとfor文の代わりにリスト内包記法を使うなどプログラ...
処理速度が多少変わる
***言語の問題 [#tf837d5c]
#ref(julia_benchmark.jpeg,,50%);
プログラミング言語により速度が変わるので
-高速化重視ならC(難易度高)
-機能重視ならPython
-バランスならGo
***CPUバウンドの場合 [#y0f4d96c]
プログラム内部の処理を高速化したい場合はマルチスレッド・...
マルチプロセスは複数のコアで並列にプログラムを処理させる...
例えば8コアのCPUの場合で2マルチスレッド, 8マルチプロセス...
2(プロセスあたりのスレッド数)× 8(コア数) = 16となり
16個並列にプログラムが動いてることになる
***スペックの問題 [#da9ff437]
単純にPCのスペックが低い可能性がある.
指導教員に相談しよう
終了行:
[[小野田]]
bs4の便利なリンク
https://qiita.com/itkr/items/513318a9b5b92bd56185
**基本事項 [#v096f46e]
スクレイピング・クローリングをする前に
[[html,css>https://liginc.co.jp/web/html-css/html/122500]...
ない人は事前に習得しておく必要がある(各用語のリンクレベ...
**Unix環境でのスクレイピング [#r384be49]
スクレイピングをやるときに必要なUnixの文字列・ファイル操...
スクレイピングを兎に角やりたい人は後半の具体的な手順へ
***基本の基本 [#nb6e49a6]
unix cat,grep,cut,sed,awkと正規表現で出来る
・ページをダウンロードできる
wget URL
・ページを出力(ダウンロードではない)
curl URL
・コマンドをtxtに吐き出す
(any command) > file.txt
・複数のコマンドをつなげるパイプ
cat file.txt | grep apple
*ちなみに上はcatでファイルを出力して,その結果からappleと...
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" >> wik...
・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
***大まかな手順 [#h7aa199a]
・fetch webページのデータ取得
・scrape htmlから正規表現で書籍のデータを抜き取る
・save sqlite等のデータベース保存
***Pythonでやる場合 [#j7e43002]
フレームワーク
・scrapy
htmlパーサー
・BeautifulSoup4
httpライブラリ
・requests urlにアクセス可
・lxml urlアクセスライブラリと併用?
・urllib系 今はrequestsが主流?
ヘッドレスブラウザ
プログラムを用いてブラウザ操りたいときに使おう!selenium...
phantomjs jsで記述 dom,node.js対応 js組み込みサイトのス...
ghost pythonで記述 詳細不明
*具体的な手順 [#gbb2e441]
***必要モジュールのインストール [#b5ab8091]
pip install beautifulsoup4 (beautifulsoupだけだと旧バー...
pip install lxml
pip install requests
javascriptが入ったページをスクレイピングしたい場合はHeadl...
基本的なことは[[こちら>http://gci.t.u-tokyo.ac.jp/tutoria...
を見ればわかる
ちなみに上サイトは非効率なやり方で行っているので本格運用...
[[この本>http://gihyo.jp/book/2017/978-4-7741-8367-1]]
もしくは[[この本>https://www.shoeisha.co.jp/book/detail/9...
を読むことをオススメする
ちなみにBeautifulSoup4を使う場合内部で使うParserをlxmlに...
**高速化したい場合 [#r77de9f8]
まずどこでオーバーヘッドが発生しているかで以下の対策が取...
上のものほどソフトウェア的であり, 下に行くほどハードウェ...
やり方は各言語によって違うので各々調べるべし
例: JavaであるとThreadクラスを使う, Pythonならthreadingモ...
***IOバウンド [#gfd26a8f]
データをwebから収集するレスポンスが遅い場合は非同期処理に...
詳しくは[[こちら>https://vaaaaaanquish.hatenablog.com/ent...
***書き方の問題 [#a854d24e]
Pythonだとfor文の代わりにリスト内包記法を使うなどプログラ...
処理速度が多少変わる
***言語の問題 [#tf837d5c]
#ref(julia_benchmark.jpeg,,50%);
プログラミング言語により速度が変わるので
-高速化重視ならC(難易度高)
-機能重視ならPython
-バランスならGo
***CPUバウンドの場合 [#y0f4d96c]
プログラム内部の処理を高速化したい場合はマルチスレッド・...
マルチプロセスは複数のコアで並列にプログラムを処理させる...
例えば8コアのCPUの場合で2マルチスレッド, 8マルチプロセス...
2(プロセスあたりのスレッド数)× 8(コア数) = 16となり
16個並列にプログラムが動いてることになる
***スペックの問題 [#da9ff437]
単純にPCのスペックが低い可能性がある.
指導教員に相談しよう
ページ名: