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

网页爬取书籍:如何提取精准作者信息并清理重复数据?

解决书店爬虫中作者信息提取的问题

问题根源

你的代码存在两个核心问题:

  1. 内层循环遍历了product-info下的所有div,导致同一本书的标题和信息被重复抓取输出
  2. 没有对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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:45:28