lxmlとは
xmlのパーサー。C言語で書かれているので高速。HTMLのスクレイピングもできる。
Beautiful soupとは
HTMLをスクレイピングするときに使う。覚えやすくて使いやすいのが特徴らしい。
内部のパーサーを自由に選べる。lxmlもパーサーの選択肢の一つ。
CSSセレクターとXPathについて
CSSで装飾された要素を指定するための表記方法。
CSSセレクターよりもXPathのほうが多機能だけど、CSSセレクターのほうが簡潔に書けるので、どちらかを学習するならCSSセレクターがおすすめらしい。
CSSセレクターの指定の仕方
>は直下を指定したいとき。何段階か下のタグを指定したいときは空白にすればよい。
idは#で指定する。CSSの書き方と一緒。
例:response.css('#yjnMain a::attr("href")').getall()
lxml.html
lxml.etreeをベースとして壊れたHTMLも扱えるHTMLパーサー
加藤 耕太. Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド- (Japanese Edition) (Kindle の位置No.1582-1583). Kindle 版.
lxml.html.parse()とは?
CSSセレクタなどで解析しやすい形式に解析(パース)してくれる。
これをやると、ElementTreeオブジェクトを得られる。
fromstring()でやると、直接HtmlElementを得ることも可能。
#なお、encodingが指定されたXML宣言を含むstrをパースすると、ValueErrorが発生するので注意が必要。
加藤 耕太. Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド- (Japanese Edition) (Kindle の位置No.1604-1605). Kindle 版.
なんでgetroot()でHtmlElementオブジェクト化する?
AttributeError: 'lxml.etree._ElementTree' object has no attribute 'cssselect'
ElementTreeにはcssselectがない。
Google colaboratoryにcsssselectを入れる
pip install lxml cssselect
でインストールしないと使えない。
Noneとか出て欲しい情報が取れないとき
Elementオブジェクトが取れてたら、dir()で囲えば持ってる属性とか持ってるメソッドとかがわかる。(その変数に対して取れるアクションがわかる。)
例えばtext_content()が使えるな、とか。それで試してみるのが良さそう。
__dict__
では値は取れてても空ディクトに見えちゃうっぽい。
Google colabで使うならseleniumよりscrapyが楽そう?
seleniumはローカルのブラウザを立ち上げるもの。コラボ環境からブラウザは開けないので、selenium使う場合もブラウザ開かないヘッドレスモード限定になりselenium使う意味がなさそう。
seleniumでできることはscrapyでもできるらしいので。
0 件のコメント:
コメントを投稿