我正试图通过BeautifulSoup获得我在Telegram上的帖子的观看次数。例如,我想从我的频道发布号956中获取它:https://t.me/dayygesstt/956
<span class="tgme_widget_message_views">3.1K</span>
所以我需要“ 3.1K”。
import requests
from bs4 import BeautifulSoup
def get_html(url):
r = requests.get(url,'lxml')
return r.text
url='https://t.me/dayygesstt/956'
html=get_html(url)
soup=BeautifulSoup(html, )
x = soup.findAll("div", {"class": "tgme_page tgme_page_post"})
for i in x :
r=i.findAll("div", {"class": "tgme_page_widget"})
print(r)
它会打印:
[<div class="tgme_page_widget" id="widget">
<script async="" data-telegram-post="dayygesstt/956" data-width="100%" src="https://telegram.org/js/telegram-
widget.js?4"></script>
</div>]
我尝试了其他方法,但无法获取更多信息。请帮助我,我在做什么错?如何正确获取信息?
答案 0 :(得分:1)
您可以使用在脚本中加载iframe的URL。然后,您只得到了没有小部件的小部件。为此,请使用原始URL,并附加查询字符串“ embed = 1”。
import requests
from bs4 import BeautifulSoup
url = 'https://t.me/dayygesstt/956?embed=1'
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
views = soup.find("span", {"class": "tgme_widget_message_views"})
print(views.text)
答案 1 :(得分:0)
我认为您需要定义与BeautifulSoup一起使用的解析器,以使其能够正确解析HTML,因此此行;
soup=BeautifulSoup(html, )
需要这样;
soup=BeautifulSoup(html, 'html.parser')