使用python刮推文的问题

时间:2018-08-25 05:30:02

标签: python html twitter beautifulsoup

我正在尝试在特定时间范围内从一个网页抓取推文。

为此,我正在使用此链接,该链接仅在我指定的时间范围内进行搜索:

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看起来对我来说一样,我也不明白为什么它不适用于搜索页面。

我是一个初学者,所以很抱歉,这是一个愚蠢的问题。谢谢!

1 个答案:

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

的不同方法