雑記

毎日を楽しく、ポジティブに。

あるホームページの情報(たくさんある名前と各個人のTwitter情報など)を引っ張り出してリストにまとめようと思って

Beautifulsoupでできるのでは?

となり

requests.get(url)

をしたのですが

どうやらそのサイトはスクロールをしないと全情報が出てこないみたいで


それならばseleniumっていうものでwebブラウザを操作しながらスクレイピングできるらしいとのこと。

seleniumを使ってスクロールをして情報を全部表示するところまでいきました。

ちなみにスクロールは

driver.execute_script(“window.scrollTo(0,10000);“)

という命令らしい

executeは命令するみたいな意味があったと思うので

driverにスクロールするように命令

scrollToのあとの数字でここからここまで

ページを5,6回スクロールしないといけなかったので、heightを10000ってかなり大きく入れてみたら全部表示できた

(後日やってみたらできなかった 1回スクロールしたら、またスクロールする ページの表示がなくなるまで という書き方分からない)


要素を検証してみると

aタグの内側?<a href=”https://“ title=“名前“></a>

となっていて

httpsと名前の情報を抜き出したいんですが

find_elements_by_tag_nameだとタグの内側部分しか取り出せない?

と思われるので何も出てこなく(リストにはって、インスタンス?っていうんですか?はたくさん表示されてるのでaタグは取り出せてる)

find_elements_by_class_name

とかで“title“ってやっても空欄で


httpsと名前の部分をどうやってfindして出力すればいいんだろうと悩んでいます

(find_elementだと要素の最初の1つのみ、find_elementsだと複数要素を抽出できる)



ということで今の状況は

Beautifulsoupだとrequests.getでhtml情報を取得できて、そこから必要な情報を簡単に探せる

ただし、加工したい情報のサイトがスクロールが必要だったため、seleniumでスクロールをしてデータを取得したいが、データの取得の仕方が分からない

requests.get(driver)とかでその時のdriverのhtml情報取れるのかな?やってみます


追記

→できない


driverの現在のhtmlを表示したい

または

sourceをとって

それを加工したい


追記

ドライバーのsourceとる

sourceがテキスト上になってるが

BeautifulSoup使いたいので、parserで加工

htmlparser


そのあとデータに

soupと変数を渡して

soup.body.main.find_all("a")

と階層を指定して、その中からaタグを調べてみると

400のデータのうち、1つを除いて、欲しい情報に共通のデータがあることがわかった



いらない情報 https:// 名前 いらない情報

という感じで400の情報をリスト化できましたが

このリストからいらない情報を一括で消すやり方が分からない


tagの<><>の間にデータを入れてくれてないと、抜き出しが難しい?