使用BeautifulSoup和Splinter从Twitter帐户检索文本



我正在尝试从 https://twitter.com/marswxreport?lang=en 的最新推文中检索文本

我尝试了以下方法:

twitter_url = 'https://twitter.com/marswxreport?lang=en'
browser.visit(twitter_url)
html = browser.html
soup = BeautifulSoup(html, 'html.parser')
tweet = soup.find('span', {'class':"css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0"}) # css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0"
print(tweet.text)

但是,它会抛出一个错误,指出"'NoneType' object has no attribute 'text'"soup.find_all()返回一个空列表。

在检查推特页面时:

<span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">InSight sol 363 (2019-12-04) low -99.8ºC (-147.6ºF) high -21.1ºC (-5.9ºF)
winds from the SSE at 5.8 m/s (13.0 mph) gusting to 20.3 m/s (45.4 mph)
pressure at 6.60 hPa</span> 

我想要的是提取"InSight sol 363 (2019-12-04( 低 -99.8ºC (-147.6ºF( 高 -21.1ºC (-5.9ºF( 从 SSE 以 5.8 米/秒(13.0 英里/小时(阵风到 20.3 米/秒(45.4 英里/小时(的压力,在 6.60 hPa">

这是因为您尝试抓取的标签在加载 html 页面后使用 javascript 加载。因此,您作为html获得的内容甚至不包含您要查找的标签。这就是为什么BeautifulSoup无法找到标签,并且在尝试查找标签时会生成NoneType和空列表的原因。

我建议使用 selenium webdriver 来抓取 html 页面,因为它在返回 html 之前处理 javascript。

您可以将 html get 代码替换为以下代码片段。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(twitter_url)
html = driver.page_source
driver.close()

最新更新