2017-01-08 33 views
6

Tôi mới sử dụng python và html. Tôi đang cố truy xuất số lượng nhận xét từ một trang bằng yêu cầu và BeautifulSoup.Lấy một số từ thẻ span, sử dụng các yêu cầu Python và Beautiful Soup

Trong ví dụ này tôi đang cố gắng để có được số 226. Đây là mã như tôi có thể nhìn thấy nó khi tôi kiểm tra trang trong 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> 

Khi tôi yêu cầu các văn bản từ URL, tôi có thể tìm mã nhưng không có nội dung giữa các thẻ span, không 226. đây là mã của tôi:

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

Nó trả về này, tương tự như trên nhưng không 226.

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

Tôi đang thua lỗ vì sao giá trị không xuất hiện. Cảm ơn bạn vì lời khuyên cho bất kỳ hỗ trợ nào.

Trả lời

4

Trang và đặc biệt là số lượng nhận xét, liên quan đến JavaScript được tải và hiển thị. Nhưng, bạn không cần phải sử dụng Selenium, hãy yêu cầu API đằng sau nó:

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

Prints:

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

tôi sắp sửa tìm url .... –

2

này sử dụng trang hoạt Javascript để có được số lượng bình luận, đây là những gì giao diện trang như khi vô hiệu hóa JavaScript: enter image description here

Bạn có thể tìm địa chỉ thực, trong đó có số lượng trong các công cụ nhà phát triển Chrome: enter image description here

Hơn bạn có thể bắt chước các yêu cầu bằng mã @alecxe.

Các vấn đề liên quan