我有一个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')
有人知道解决方法吗?
答案 0 :(得分:0)
使用BeautifulSoup的问题在于它纯粹是用于html报废。第一条推文自动加载到html中,但下一条推文使用javascript加载。 BeautifulSoup将无法访问这些,你将需要一些其他库来处理javascript加载的元素。我建议研究一下可以模仿网络用户的硒。
答案 1 :(得分:0)
我能找到的最佳方法是使用twitters search page并从网页中删除数据。您可以通过在搜索查询中修改日期和日期来获取更多搜索数据。
修改URL的参数以生成不同的搜索结果。例如,将参数q=%23hashtagName
附加到网址会为您提供包含主题标签"hashtagname"
的推文。
答案 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)
不确定这是否是最有效的方式,但它可以实现我的目标!