Получить номер из тега span, используя запросы Python и красивый суп
Я новичок в python и html. Я пытаюсь получить количество комментариев со страницы, используя запросы и BeautifulSoup.
В этом примере я пытаюсь получить номер 226. Вот код, как я вижу его, когда я проверяю страницу в Chrome:
<a title="Go to the comments page" class="article__comments-counts" href="http://www.theglobeandmail.com/opinion/will-kevin-oleary-be-stopped/article33519766/comments/">
<span class="civil-comment-count" data-site-id="globeandmail" data-id="33519766" data-language="en">
226
</span>
Comments
</a>
когда я запрашиваю текст из URL, я могу найти код, но между тегами span нет содержимого, нет 226. Вот мой код:
import requests, bs4
url = 'http://www.theglobeandmail.com/opinion/will-kevin-oleary-be-stopped/article33519766/'
r = requests.get()
soup = bs4.BeautifulSoup(r.text, 'html.parser')
span = soup.find('span', class_='civil-comment-count')
он возвращает это, как и выше, но нет 226.
<span class="civil-comment-count" data-id="33519766" data-language="en" data-site-id="globeandmail">
</span>
Я в недоумении, почему значение не появляется. Заранее спасибо за любую помощь.
2 ответов
страница, и в частности количество комментариев, включает JavaScript для загрузки и отображения. Но,вам не нужно использовать селен, сделайте запрос к API за ним:
import requests
with requests.Session() as session:
session.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36"}
# visit main page
base_url = 'http://www.theglobeandmail.com/opinion/will-kevin-oleary-be-stopped/article33519766/'
session.get(base_url)
# get the comments count
url = "https://api-civilcomments.global.ssl.fastly.net/api/v1/topics/multiple_comments_count.json"
params = {"publication_slug": "globeandmail",
"reference_language": "en",
"reference_ids": "33519766"}
r = session.get(url, params=params)
print(r.json())
принты:
{'comment_counts': {'33519766': 226}}