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

