@liefesez (liefez igunati)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Python】BeautifulSoup4「select」でスクレイピング時にエラーが出ます

解決したいこと

Pythonで、ツイッターの任意のアカウントのツイート数・フォロー数・フォロワー数を取得したいです。
まずはツイート数から取得しようと思っているのですが、BeautifulSoup4の「select」実行時にエラーが出てしまいます。
ご教示いただけると幸いです。

発生している問題・エラー

AttributeError: 'NoneType' object has no attribute 'text'

該当するソースコード

import requests
from bs4 import BeautifulSoup

userid = "@liefesez" 

url ="https://twitter.com/" + userid

res = requests.get(url)

soup = BeautifulSoup(res.text, "html.parser")

tweets = soup.select_one("#react-root > div > div > div.css-1dbjc4n.r-18u37iz.r-13qz1uu.r-417010 > main > div > div > div > div > div > div.css-1dbjc4n.r-aqfbo4.r-14lw9ot.r-j7yic.r-rull8r.r-qklmqi.r-gtdqiz.r-ipm5af.r-1g40b8q > div.css-1dbjc4n.r-1loqt21.r-136ojw6 > div > div > div > div > div.css-1dbjc4n.r-16y2uox.r-1wbh5a2.r-1pi2tsx.r-1777fci > div > div").text

print("ツイート数:" + tweets)

自分で試したこと

pythonはおろかプログラミング自体初心者です。
最初は下記サイトを参考にして、プログラムを組んでみました。
https://note.com/ugok_girls/n/nd3e6a2468deb
その後findよりもselectのほうが使い勝手がよいという下記記事を目にし、上掲のソースコードに組み替えました。
https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406
おそらく「soup.select.one(」以降のCSSセレクタの部分の記述がおかしく、エラーが出ているのではないかと思うのですが、
この部分は上記サイトの指南通り、Chromeでコードをコピーして貼り付けたものです。
恥ずかしながらhtml、cssの知識もあまりないため、どう間違っているかわからず難儀しています。
ご教示いただけると幸いです。

0 likes

1Answer

その選択対象の要素は JavaScript によって動的に作成されるものです。 BeautifulSoup は HTML を読むだけで JavaScript を解釈・実行しないので要素は見つかりません。

動的なページのスクレイピングは難しいですし、ページデザインの変更に対して弱く壊れやすいです。スクレイピングではなく Twitter API を使うことをおすすめします。

0Like

Comments

  1. @liefesez

    Questioner

    早々のご回答、ありがとうございます。JavaScriptで動的に作成されているとのこと、調べてみて理解しました。APIで目的を達成できないか、試行錯誤してみます。ご教示いただきありがとうございました。

Your answer might help someone💌