【问题标题】:BS4 find_all not matching mini_card-title class from Genius LyricsBS4 find_all 与 Genius Lyrics 中的 mini_card-title 类不匹配
【发布时间】:2019-06-01 15:07:40
【问题描述】:

我正在尝试从天才歌词的歌曲搜索中获取歌曲的标题,但是,使用 .find_all("div", class_="mini_card-title") 尝试获取歌曲的名称并没有工作,但 .find_all("div" class_="header") 确实有效!

这只是我正在处理的一个小项目,在 Visual Studio 2019 上运行,使用 python 3.7。我正在使用 2 个模块:请求和 bs4。我曾尝试更改解析器,将 find_all 更改为查找和选择,但是这些都没有帮助。

不起作用的代码:

soup = bs4.BeautifulSoup(res.text, "html.parser")
a = soup.find_all("div", class_="mini_card-title")
print(a)

有效的代码:

soup = bs4.BeautifulSoup(res.text, "html.parser")
a = soup.find_all("div", class_="header")
print(a)

我希望得到歌曲的名字,即使得到页面上所有歌曲的名字也可以,但是目前我只得到一个空白列表。

【问题讨论】:

  • 例如在什么页面上?这两种方法中的一种有效有什么问题?
  • 如果可能请提供网址
  • @Qharr ,我正在使用 URL:genius.com/search?q=something,方式如下: res = requests.get("genius.com/search?q=something")
  • 在标题中使用短语“不起作用”或“不起作用”是在此处获得非常负面响应的好方法,而不是狭隘地描述特定且定义明确的行为(“按类别过滤时不返回响应”,f/e)。

标签: python html web-scraping beautifulsoup


【解决方案1】:

您可以使用页面用来动态获取结果的 API 来获取所有信息。我展示了打印出一些标题,但探索 json 响应以查看您想要的内容。

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://genius.com/api/search/multi?per_page=5&q=something').json()
for item in r['response']['sections']:
    for subitem in item['hits']:
        if 'title' in subitem['result']:
            print(subitem['result']['title'])

【讨论】:

猜你喜欢
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多