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

问题描述 投票:0回答:1

我正在尝试从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()返回一个空列表。

检查twitter页面:

<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> 

我想要的是以5.8 m / s(13.0 mph)的速度从SSE提取“ InSight sol 363(2019-12-04)-99.8ºC(-147.6ºF)低温-21.1ºC(-5.9ºF)高的风在6.60 hPa时阵风至20.3 m / s(45.4 mph)的压力“]

python web-scraping beautifulsoup splinter
1个回答
0
投票

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

我建议使用Selenium Webdriver在返回html之前处理javascript时获取html页面。

您可以使用以下代码段替换html获取代码。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(twitter_url)
html = driver.page_source
driver.close()
© www.soinside.com 2019 - 2024. All rights reserved.