在没有 Twitter API 的情况下抓取基于主题标签的历史推文



我有一个网络爬虫,给定一个主题标签,它将返回带有该主题标签的推文。我遇到的问题是,当我向推特提出获取主题标签的请求时,我只收到大约 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')

有人知道解决这个问题的方法吗?

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

我最终做的非常有效的是使用硒打开浏览器,并将页面向下滚动"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)

不确定这是否是最有效的方法,但它可以满足我的需求!

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

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

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

相关内容

最新更新