Красивый суп питон. Получите полную информацию из HTML - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь получить количество просмотров моего поста в Telegram через BeautifulSoup. Например, я хочу взять его из поста на канале с номером 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 голосов
/ 04 июля 2018

Вы можете использовать URL, который загружает iframe в вашем скрипте. Тогда вы получаете только виджет без излишеств. Для этого возьмите исходный 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)
0 голосов
/ 03 июля 2018

Я думаю, вам нужно определить, какой синтаксический анализатор использовать с BeautifulSoup, чтобы он правильно анализировал HTML, поэтому эта строка;

soup=BeautifulSoup(html, )

должно быть этим;

soup=BeautifulSoup(html, 'html.parser')
...