Beautiful Soup python .get from html的完整信息

时间:2018-07-03 12:08:10

标签: python python-3.x parsing beautifulsoup telegram

我正试图通过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>]

我尝试了其他方法,但无法获取更多信息。请帮助我,我在做什么错?如何正确获取信息?

2 个答案:

答案 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')