2017-01-08 2 views
6

Я новичок в python и html. Я пытаюсь получить количество комментариев с страницы с помощью запросов и BeautifulSoup.Извлечь число из тега span, используя запросы Python и Beautiful Soup

В этом примере я пытаюсь получить номер 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, I можно найти код, но там нет контента между тегами пролетами, нет 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> 

Я не понимаю, почему значение не появляется. Заранее благодарю вас за любую помощь.

ответ

4

На странице и, в частности, количество комментариев, включает JavaScript для загрузки и отображения. Но, вы не должны использовать Selenium, сделать запрос к 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}} 
+0

я собирался найти URL .... –

2

Это использование страницы JavaScript, чтобы получить комментарий число, это то, что страница выглядит, когда отключить JavaScript: enter image description here

Вы можете найти реальный URL, который содержит число в инструментах разработчика Chrome: enter image description here

Чем вы можете имитировать запросы, используя код @alecxe.