我正在尝试在特定时间范围内从一个网页抓取推文。
为此,我正在使用此链接,该链接仅在我指定的时间范围内进行搜索:
https://twitter.com/search?f=tweets&q=subwaydstats%20since%3A2016-08-22%20until%3A2018-08-22
这是我的代码:
import pandas as pd
import datetime as dt
import urllib.request
from bs4 import BeautifulSoup
url = 'https://twitter.com/search?f=tweets&q=subwaydstats%20since%3A2016-08-22%20until%3A2018-08-22'
thepage = urllib.request.urlopen(url)
soup = BeautifulSoup(driver.page_source,"html.parser")
i = 1
for tweet in soup.find_all('div', {'class': 'js-tweet-text-container'}):
print(tweet.find('p', {'class': 'TweetTextSize'}).text.encode('UTF-8'))
print(i)
i += 1
当我从Metrostatstat用户的实际Twitter页面中抓取时,以上代码有效。
由于这个原因,即使html看起来对我来说一样,我也不明白为什么它不适用于搜索页面。
我是一个初学者,所以很抱歉,这是一个愚蠢的问题。谢谢!
答案 0 :(得分:0)
有一个Twitter API-Twitter搜索API文档:https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets 使用非官方的Python包装器:https://github.com/bear/python-twitter可以非常轻松地获取推文。
但是,如果您要抓取HTML,则要困难得多。我在做类似的事情-刮一个有角度的应用程序,但是,您在屏幕上看到的实际HTML实际上是通过“前端javascript”呈现的。请求和urllib,仅获取基本HTML,但不运行javascript。
您可以使用selenium,它基本上是一种浏览器,可以自动执行任务。由于它的行为就像浏览器一样,因此它实际上运行该前端javascript,这意味着您将能够抓取该网页。
这里有一篇很棒的文章介绍了刮擦Twitter https://medium.com/@dawran6/twitter-scraper-tutorial-with-python-requests-beautifulsoup-and-selenium-part-2-b38d849b07fe
的不同方法