2 Câu hỏi: Sự cố với dữ liệu cạo từ trang web với BeautifulSoup

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đang cố gắng xếp hạng phim từ trang web Letterboxd. Tôi đã sử dụng mã như thế này trên các trang web khác và nó đã hoạt động, nhưng nó không nhận được thông tin tôi muốn từ trang web này.

import requests
from bs4 import BeautifulSoup
page = requests.get("https://letterboxd.com/film/avengers-endgame/")
soup = BeautifulSoup(page.content, 'html.parser')
final = soup.find("section", attrs={"class":"section ratings-histogram- 
chart"})
print(final)

Điều này không in gì, nhưng có một thẻ trong trang web cho lớp này và thông tin tôi muốn nằm dưới nó.

    
- 1
2 Câu trả lời                              2                         

Lý do đằng sau điều này là do trang web tải hầu hết nội dung không đồng bộ, do đó bạn sẽ phải xem các yêu cầu http mà nó gửi đến máy chủ để tải nội dung trang sau khi tải bố cục trang. Bạn có thể tìm thấy chúng trong phần "mạng" trong trình duyệt (phím F12). Chẳng hạn, một trong những apis họ sử dụng để tải xếp hạng là cái này:

0

2019-05-08 14: 23: 50Z

Bạn có thể lấy mức trung bình có trọng số từ một thẻ khác

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://letterboxd.com/film/avengers-endgame/')
soup = bs(r.content, 'lxml')
print(soup.select_one('[name="twitter:data2"]')['content'])

Văn bản của tất cả biểu đồ

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://letterboxd.com/csi/film/avengers-endgame/rating-histogram/')
soup = bs(r.content, 'lxml')
ratings = [item['title'].replace('\xa0',' ') for item in soup.select('.tooltip')]
print(ratings)
    
0
2019-05-08 14: 42: 11Z
nguồn đặt đây