使用BeautifulSoup获取Twitter推文转发数的技术问题
嘿,我发现你这段代码里有个核心问题——你直接把Twitter的URL传给了BeautifulSoup,但BeautifulSoup本身并不能发起HTTP请求获取网页内容,它只能解析已经拿到的HTML源码。得先通过请求工具(比如requests库)把页面的HTML拉下来,再交给BeautifulSoup处理。
另外要提醒你:Twitter的前端页面结构经常会更新,你用的那些旧class选择器(比如js-tweet-stats-container、js-stat-retweets)大概率已经失效了,这会导致你找不到目标元素。
给你调整后的示例代码,同时加上了反爬的请求头(避免被Twitter拦截),并适配了当前的页面结构:
import requests from bs4 import BeautifulSoup # 模拟浏览器请求,防止被Twitter的反爬机制拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36' } # 目标推文URL tweet_url = 'https://twitter.com/dog_rates/status/758828659922702336' # 先获取页面的HTML内容 response = requests.get(tweet_url, headers=headers) # 检查请求是否成功 if response.status_code != 200: print(f"请求失败,状态码: {response.status_code}") else: soup = BeautifulSoup(response.text, 'lxml') # 基于当前Twitter页面结构查找转发数元素 retweet_section = soup.find('div', data_testid='retweet') if retweet_section: # 提取转发数字段 retweet_count = retweet_section.find('span', class_='css-1jxf684 r-18u37iz r-1q142lx').text print(f"该推文的转发数: {retweet_count}") else: print("未找到转发数元素,可能Twitter页面结构已更新,请重新检查选择器")
最后再啰嗦一句:你提到的Twitter API确实是更靠谱的方案——网页抓取需要频繁适配页面结构,维护成本很高;而API会返回结构化的JSON数据,直接就能拿到转发数、点赞数等信息,稳定性和效率都远高于网页解析。
内容的提问来源于stack exchange,提问作者Himesh Sheth
相关产品推荐
相关产品推荐

