クロール&スクレイピング覚え書き

create 2021/08/12

Python クロール スクレイピング 勉強メモ

t f B! P L

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でもできるらしいので。

参考にした本
Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド-

このブログを検索

自己紹介

自分の写真
Pythonが趣味です。 勉強のアウトプットを公開したくて、新たにブログ開設しました。 勉強メモのつもりだけど、日常の雑記も書きたい予定。

独学中の身で、個人的な勉強メモも投稿しているので、間違った内容が含まれることもあるかもしれません。
お気づきの際は、問い合わせフォームや、コメント欄からご指摘いただけましたら、大変助かります。

旧ブログ(更新停止中。いずれ統合するかも)ゆーるるのゆるゆる日記

参加中ランキング

PVアクセスランキング にほんブログ村

ブログ アーカイブ

QooQ