在Twitter上使用beauthoulsoup获取转发信息

2024-03-29 05:10:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道我可以使用Twitter API来实现这一点,但我正在尝试使用BeautifulSoup来提取以下示例tweet的转发计数:

from bs4 import BeautifulSoup

soup = 
BeautifulSoup('https://twitter.com/dog_rates/status/758828659922702336', 
'lxml')

retweet_count = soup.find('div', {'class': 'js-tweet-stats-container tweet-
stats-container'}).find('ul', {'class': 'stats'}).find('li', {'class': 'js-
stat-count js-stat-retweets stat-count'}).contents

print(retweet_count)

我试图打印出“contents”,这样我就可以看到下一步从哪里提取转发计数(本例中当前为4288)。在

但是,即使在这个阶段,我也会得到以下错误:

^{pr2}$

如果有人能告诉我我错在哪里,我将非常感激。在

谢谢


Tags: apicontainerstatscountcontentsjstwitterfind
1条回答
网友
1楼 · 发布于 2024-03-29 05:10:07

BeautifulSoup对象接受一个表示标记的字符串作为参数(请参见Making the soup)。你需要先得到网页的内容。例如,使用requests库:

import requests

html = requests.get('https://twitter.com/dog_rates/status/758828659922702336').text

另一个问题是您没有访问包含retweet计数的元素。结果得到了几个标记元素:

^{pr2}$

要解决这个问题,需要调用find来获取锚定标记,并使用attrs字典来获取data-tweet-stat-count属性:.attrs["data-tweet-stat-count"]

获取转发计数的最终产品是:

import requests
from bs4 import BeautifulSoup

html = requests.get('https://twitter.com/dog_rates/status/758828659922702336').text
soup = BeautifulSoup(html, 'lxml')

retweet_count = soup.find(
    'div', {'class': 'js-tweet-stats-container tweet-stats-container'}
).find(
    'ul', {'class': 'stats'}
).find(
    'li', {'class': 'js-stat-count js-stat-retweets stat-count'}
).find(
    'a', {'class': 'request-retweeted-popup'}
).attrs["data-tweet-stat-count"]

print(retweet_count)

这将打印出4288

相关问题 更多 >