使用 beautiful soup 抓取 twitter 时出现问题

-2 python beautifulsoup python-requests

使用 beautiful soup 和 requests 库抓取 Facebook 或 Twitter 等带有大量 html 标签的大型网站时出现问题。

from bs4 import BeautifulSoup 
import requests 

html_text = requests.get('https://twitter.com/elonmusk').text

soup = BeautifulSoup(html_text, 'lxml')
elon_tweet = soup.find_all('span', class_='css-901oao css-16my406 r-poiln3 r-bcqeeo r-qvutc0')
print(elon_tweet)
Run Code Online (Sandbox Code Playgroud)

推文及其相应的跨度

全跨度图像

img 链接到跨度

当代码执行时,它返回一个空列表。

我是网络抓取的新手,欢迎详细解释。

小智 5

问题是 Twitter 正在动态加载其内容。这意味着当您发出请求时,页面将被加载并首先从此处返回 html(在浏览器的地址栏中写入:“view-source: https: //twitter.com/elonmusk”

随后,页面加载后,将执行 JavaScript 并添加页面的完整内容。通过来自 python 的请求,您只能抓取“view-source: https://twitter.com/elonmusk”上可用的内容,正如您所看到的,您尝试抓取的元素不存在。

要抓取这个元素,您需要使用 selenium,它允许您直接从 python 模拟浏览器,因此需要额外等待几秒钟,以便加载整个内容。您可以在这里找到一个很好的指南:https ://www.freecodecamp.org/news/how-to-scrape-websites-with-python-2/

另外,如果您不想遇到这些麻烦,您可以使用允许 JavaScript 渲染的 API。