【问题标题】:Beautiful Soup - extracting text from multiple webpages using find_allBeautiful Soup - 使用 find_all 从多个网页中提取文本
【发布时间】:2021-04-07 04:51:39
【问题描述】:

我正在尝试从一些 IMDb 评级页面中提取“所有年龄段”的投票计数,但我编写的代码返回了额外的 HTML 代码,我不确定如何仅提取数字。 IMDb 有一些数据可供下载,但不包括男性和女性选民的数据。我已通读并尝试了类似 SO 问题中列出的解决方案,例如 BS4 Beautiful Soup extract text from find_all,但使用 .text 或 text=True 不会返回任何结果。

我正在使用的代码:

from bs4 import BeautifulSoup
from requests import get
from operator import itemgetter

imdburls = ['https://www.imdb.com/title/tt0029844/ratings','https://www.imdb.com/title/tt0030993/ratings']

Votes = []

for i in imdburls:
    url = i
    page = get(url)
    soup = BeautifulSoup(page.content, 'lxml') 
    content = soup.find(id="main")
    voteValues = content.find_all(class_="smallcell")
    voteValues = itemgetter(0,5,10)(voteValues) # This returns the values from the 'All Ages' column
    Votes.append(voteValues)

当我只想要实际数字时,Votes 会为第一个 url 返回这个:

[(<div class="smallcell">
  <a href="/title/tt0029844/ratings?demo=imdb_users">
                      1,761
                  </a>
  </div>,
  <div class="smallcell">
  <a href="/title/tt0029844/ratings?demo=males">
                      1,176
                  </a>
  </div>,
  <div class="smallcell">
  <a href="/title/tt0029844/ratings?demo=females">
                      178
                  </a>
  </div>),  

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    您需要 &lt;div&gt;s 中的 &lt;a&gt; 元素中的 .text

    from bs4 import BeautifulSoup
    from requests import get
    from operator import itemgetter
    
    imdburls = ['https://www.imdb.com/title/tt0029844/ratings','https://www.imdb.com/title/tt0030993/ratings']
    
    Votes = []
    
    for i in imdburls:
        url = i
        page = get(url)
        soup = BeautifulSoup(page.content, 'lxml') 
        content = soup.find(id="main")
        voteValues = content.select("div.smallcell > a")
        voteValues = itemgetter(0,5,10)(voteValues) # This returns the values from the 'All Ages' column
        Votes.append([n.text.strip() for n in voteValues])
    
    from pprint import pprint
    pprint(Votes)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-16
      • 2017-10-22
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多