在没有Twitter API的基础上使用Hashtag抓取历史推文

时间:2017-06-12 17:58:26

标签: python twitter web-scraping python-requests hashtag

我有一个webscraper,给定一个hashtag,将返回带有该hashtag的推文。我遇到的问题是,当我向twitter发出请求以获取主题标签时,我只收到大约20条推文。我正在使用请求发出请求并获取页面源,其中只包含20条推文。

我相信twitter一次只发送几条推文,但我想知道是否有一种方法,不使用twitter api,获得的内容超过了最初在页面上呈现的内容。

我提出请求的当前代码如下所示:

import requests
from bs4 import BeautifulSoup

def find_hashtags(hashtag):
    r = requests.get('https://twitter.com/hashtag/' + hashtag + '?src=hash')
    data = r.text
    soup = BeautifulSoup(data, "html5lib")

find_tweets('cnn')

有人知道解决方法吗?

3 个答案:

答案 0 :(得分:0)

使用BeautifulSoup的问题在于它纯粹是用于html报废。第一条推文自动加载到html中,但下一条推文使用javascript加载。 BeautifulSoup将无法访问这些,你将需要一些其他库来处理javascript加载的元素。我建议研究一下可以模仿网络用户的硒。

答案 1 :(得分:0)

我能找到的最佳方法是使用twitters search page并从网页中删除数据。您可以通过在搜索查询中修改日期和日期来获取更多搜索数据。

修改URL的参数以生成不同的搜索结果。例如,将参数q=%23hashtagName附加到网址会为您提供包含主题标签"hashtagname"的推文。

https://twitter.com/search?q=%23hashtagName

答案 2 :(得分:0)

我最终做的最好的工作是使用selenium打开浏览器,然后向下滚动页面' i'次数。

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import re

def find_hashtags(hashtag):
    driver = webdriver.Chrome()
    driver.get('https://twitter.com/hashtag/' + hashtag + '?src=hash')
    for i in range(100):
        print(i)
        driver.execute_script("window.scrollTo(0, 100000)")
        time.sleep(1.5)

不确定这是否是最有效的方式,但它可以实现我的目标!