gpt4 book ai didi

python - 为什么 BeautifulSoup 在搜索结果网站上返回空列表?

转载 作者:行者123 更新时间:2023-11-30 21:58:54 24 4
gpt4 key购买 nike

我正在寻找在线获取特定文章的价格,但我似乎无法在标签下获取该元素,但我可以在该网站的另一个(不同)网站上执行此操作。在这个特定的网站中,我只得到一个空列表。打印 soup.text 也可以。如果可能的话,我不想使用 Selenium,因为我希望了解 BS4 如何处理这种情况。

import requests
from bs4 import BeautifulSoup
url = 'https://reverb.com/p/electro-harmonix-oceans-11-reverb-2018'

r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
cards = soup.select(".product-row-card")
print (cards)
>>>[]

我想得到的是网站上卡片的名称和价格。我以前也遇到过这个问题,但这里的每个解决方案都只建议使用 Selenium (我可以让它工作),但我不知道为什么。我发现它更不实用。

此外,当我读到网站正在使用 javascript 来获取此结果时,是否有可能。如果是这样的话,为什么我能取到https://reverb.com/price-guide/effects-and-pedals中的数据呢?但不在这里?在这种情况下,Selenium 是唯一的解决方案吗?

最佳答案

您是正确的,您所定位的网站依赖 javascript 来呈现您尝试获取的数据。问题是 requests 不评估 javascript。

您也认为 Selenium WebDriver 通常在这些情况下使用,因为它驱动一个真正的、成熟的浏览器实例。但这不是唯一的选择,如 requests-html有 JavaScript 支持,对于简单的抓取来说也许不那么麻烦。

作为入门示例,以下内容获取您正在访问的网站上前五件商品的标题和价格:

from requests_html import HTMLSession
from bs4 import BeautifulSoup

session = HTMLSession()
r = session.get("https://reverb.com/p/electro-harmonix-oceans-11-reverb-2018")
r.html.render(sleep=5)

soup = BeautifulSoup(r.html.raw_html, "html.parser")
for item in soup.select(".product-row-card", limit=5):
title = item.select_one(".product-row-card__title__text").text.strip()
price = item.select_one(".product-row-card__price__base").text.strip()
print(f"{title}: {price}")

结果:

Electro-Harmonix EHX Oceans 11 Eleven Reverb Hall Spring Guitar Effects Pedal: $119.98Electro-Harmonix Oceans 11 Reverb - Used: $119.99Electro-Harmonix Oceans 11 Multifunction Digital Reverb Effects Pedal: $122Pre-Owned Electro-Harmonix Oceans 11 Reverb Multi Effects Pedal Used: $142.27Electro-Harmonix Oceans 11 Reverb Matte Black: $110

关于python - 为什么 BeautifulSoup 在搜索结果网站上返回空列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54757437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com