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

Python新手求助:网页抓取生成书籍-作者字典重复混乱问题修复

修复你的Python网页爬虫问题

嘿,我来帮你搞定这个爬虫问题!你的代码主要是在元素定位和数据提取上走偏了,导致结果混乱还有重复,咱们一步步来修正:

原代码的核心问题

  • 你用for i in article.find_all()遍历了article下的所有子元素,包括嵌套的div、span这些无关元素,自然会重复抓取到内容
  • 找书名的写法错误:i.find("h2", "a href", class_="teaser-title")不符合BeautifulSoup的参数规范,而且你应该先定位到每本书的独立容器,再从里面找信息
  • 把价格标签(price-amount)当成了作者,这明显搞错了元素类名,作者对应的是teaser-author类的元素
  • 直接把BeautifulSoup的Tag对象作为字典的键和值,输出的结果肯定是混乱的标签对象,而不是你要的文本内容

修复后的完整代码

import requests
from bs4 import BeautifulSoup

url = "https://www.banyen.com/new-arrivals/index.html"
response = requests.get(url)
response.raise_for_status()  # 请求失败时抛出异常,方便调试排错
html = response.content
scraped = BeautifulSoup(html, 'html.parser')

results = []
# 先定位到每一本书的独立容器:每个teaser类的article就是一本书的卡片
book_containers = scraped.find_all("article", class_="teaser")

for container in book_containers:
    # 提取书名:从teaser-title的h2下的a标签获取文本,去掉前后空格
    title_element = container.find("h2", class_="teaser-title").find("a")
    book_title = title_element.get_text(strip=True) if title_element else "未知书名"
    
    # 提取作者:从teaser-author的div获取文本
    author_element = container.find("div", class_="teaser-author")
    book_author = author_element.get_text(strip=True) if author_element else "未知作者"
    
    # 只把有有效书名的条目加入结果
    if book_title != "未知书名":
        results.append({"书名": book_title, "作者": book_author})

# 清晰打印结果(也可以直接print(results)看字典列表)
for idx, book_info in enumerate(results, 1):
    print(f"{idx}. 《{book_info['书名']}》 - {book_info['作者']}")

修复的关键要点

  1. 精准定位容器:用find_all("article", class_="teaser")直接抓取每本书的卡片容器,避免遍历无关元素,彻底解决重复问题
  2. 正确提取文本:用get_text(strip=True)把标签里的纯文本提取出来,字典里存的是清晰的字符串,不再是混乱的Tag对象
  3. 容错处理:给书名和作者加了默认值,就算某本书的信息缺失,程序也不会崩溃
  4. 调试辅助:加入response.raise_for_status(),如果网页请求失败(比如404、500),会直接抛出异常,帮你快速排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:18:00