2017-01-08 1 views
6

Ich bin neu in Python und HTML. Ich versuche die Anzahl der Kommentare von einer Seite mit Anfragen und BeautifulSoup zu erhalten.Abrufen einer Zahl aus einem span-Tag, mit Python-Anfragen und schöne Suppe

In diesem Beispiel I 226. Hier die Nummer zu bekommen versuche, ist der Code, wie ich es sehen kann, wenn ich die Seite in Chrome inspizieren:

<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> 

Wenn ich den Text aus der URL anfordern, I finden Sie den Code aber noch keine Inhalte zwischen den span-Tags, ist kein 226. Hier mein Code:

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

Es gibt diese, gleiche wie oben, aber keine 226.

<span class="civil-comment-count" data-id="33519766" data-language="en" data-site-id="globeandmail"> 
</span> 

Ich weiß nicht, warum der Wert nicht erscheint. Vielen Dank im Voraus für jegliche Hilfe.

Antwort

4

Die Seite, und speziell die Anzahl der Kommentare, beinhaltet JavaScript geladen und angezeigt werden. Aber Sie müssen nicht Selen verwenden, machen Sie eine Anfrage an die API dahinter:

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()) 

Drucke:

{'comment_counts': {'33519766': 226}} 
+0

Ich war über die URL finden .... –

2

Auf dieser Seite können Sie JavaScript Kommentar Nummer bekommen, ist es das, was die Seite aus wie wenn deaktivieren Sie die JavaScript: enter image description here

Sie können die reale URL finden, die die Anzahl in den Chrome-Entwickler-Tools enthält: enter image description here

Dann können Sie die Anfragen mit @alecxe-Code nachahmen.