-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)
全跨度图像
当代码执行时,它返回一个空列表。
我是网络抓取的新手,欢迎详细解释。
小智 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。