网页爬取书籍:如何提取精准作者信息并清理重复数据?
解决书店爬虫中作者信息提取的问题
问题根源
你的代码存在两个核心问题:
- 内层循环遍历了
product-info下的所有div,导致同一本书的标题和信息被重复抓取输出 - 没有对
info__text类的内容做筛选,该类下按固定顺序存放了作者、ISBN、出版社等信息,直接全部输出就会混入无关内容
解决方案
观察目标页面的结构,每个product-info对应单本书,且info__text类的元素按作者→ISBN→出版社→装帧→出版年份的固定顺序排列,只需取第一个元素就是作者信息。修改后的代码如下:
import requests from bs4 import BeautifulSoup headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'} response = requests.get('https://www.apollo.ee/raamatud/eestikeelsed-raamatud/ilukirjandus/ulme-ja-oudus?page=7&mode=list',headers=headers) webpage = response.content soup = BeautifulSoup(webpage,'html.parser') # 遍历每本书的product-info块 for book in soup.find_all('div',class_='product-info'): # 获取单本书的标题,用find而非find_all避免列表处理 title_tag = book.find('a',class_='block no-underline product-link') title = title_tag.text.strip() if title_tag else '无标题' # 获取所有info__text元素,取第一个作为作者 info_tags = book.find_all('span',class_='info__text block weight-700 mt8 mb16') author = info_tags[0].text.strip() if info_tags else '无作者' # 输出结果 print(f'TITLE: {title}') print(f'AUTHOR: {author}') print('---')
代码说明
- 去掉内层冗余的
div循环,直接针对单本书的product-info块提取信息,避免重复输出 - 用
find()获取标题(单本书只有一个标题),简化代码逻辑 - 通过索引
info_tags[0]直接取第一个info__text元素,精准获取作者信息 - 增加了空值判断,避免因页面结构异常导致的报错
内容的提问来源于stack exchange,提问作者Jör
相关产品推荐
相关产品推荐

