【问题标题】:Problem with scraping data from website with BeautifulSoup使用 BeautifulSoup 从网站抓取数据的问题
【发布时间】:2019-09-26 07:26:20
【问题描述】:

我正在尝试从 Letterboxd 网站获取电影评级。我在其他网站上使用过这样的代码并且它已经工作了,但它没有从这个网站获得我想要的信息。

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)

这不会打印任何内容,但是网站中有一个标签用于这个类,我想要的信息就在它下面。

【问题讨论】:

    标签: python beautifulsoup python-requests screen-scraping


    【解决方案1】:

    这背后的原因是,网站以异步方式加载大部分内容,因此您必须查看它发送到服务器的 http 请求,以便在加载页面布局后加载页面内容。您可以在浏览器的“网络”部分找到它们(F12 键)。 例如,他们用来加载评分的 api 之一是:

    https://letterboxd.com/csi/film/avengers-endgame/rating-histogram/

    【讨论】:

      【解决方案2】:

      您可以从另一个标签获取加权平均值

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

      所有直方图的文字

      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)
      

      【讨论】:

        猜你喜欢
        • 2021-10-26
        • 1970-01-01
        • 2015-03-27
        • 2021-01-23
        • 2019-12-15
        • 2018-10-04
        • 2021-11-18
        • 2022-11-04
        相关资源
        最近更新 更多