You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup爬取Books to Scrape网站价格仅获取首个结果的技术求助

问题排查与解决

我来帮你分析下问题出在哪~

你当前代码的核心问题是使用了错误的查找逻辑:

  1. soup.find_all("div", class_ = "col-sm-8 col-md-9") 找到的是页面右侧的整个主内容区域,整个页面只有1个这样的div元素。
  2. 接着在这个div里调用i.find("p", class_ = "price_color"),而find()方法的特性是只返回第一个匹配到的元素,所以你只能拿到第一个图书的价格。

下面给你两种可行的修正方案,按需选择:

方案一:直接批量获取所有价格标签

因为页面中所有图书价格都带有统一的price_color类,我们可以直接定位所有这类标签,一次性拿到全部20个价格:

from bs4 import BeautifulSoup
import requests
URL = 'http://books.toscrape.com/catalogue/page-1.html'
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")

# 直接找到所有带price_color类的p标签
prices = soup.find_all("p", class_ = "price_color")
for price in prices:
    print(price.text.strip())

方案二:按图书容器逐个提取价格(更推荐)

每个图书都包裹在class="product_pod"的<article>标签里,先定位所有图书的独立容器,再在每个容器内提取价格。这种方式更灵活,后续如果需要爬取书名、评分等其他信息,也能轻松扩展:

from bs4 import BeautifulSoup
import requests
URL = 'http://books.toscrape.com/catalogue/page-1.html'
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")

# 找到所有图书的容器
books = soup.find_all("article", class_ = "product_pod")
for book in books:
    # 在单个图书容器内查找价格标签
    price = book.find("p", class_ = "price_color")
    print(price.text.strip())

运行任意一种方案,你都能看到完整的20个图书价格啦~

内容的提问来源于stack exchange,提问作者f4r3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:42:40