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

BeautifulSoup仅提取标签最后一项问题:如何匹配对应作者与标题

问题分析与解决方案

你的问题根源在于每次遍历书籍条目时,都循环了整个作者列表并反复覆盖item['author'],最后所有条目自然都被设置成了最后一位作者的值。另外,直接全局提取所有作者再对应,也存在页面结构变动(比如某本书无作者)导致的匹配风险。

修复思路

应该从每个书籍的独立条目容器中分别提取标题和作者,确保二者一一对应。观察Archive.org的页面结构,每本有声书的完整信息都包裹在class="item-ia"的div中,我们可以先定位这个父容器,再在内部查找标题和作者元素。

修改后的完整代码

from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
import json

base_url = "https://archive.org/details/librivoxaudio?&sort=titleSorter"
data = []
n = 5

for i in range(1, n+1):
    response = urlopen(base_url + "&page=" + str(i))
    page_html = response.read()
    response.close()
    
    # HTML解析
    page_soup = soup(page_html, "html.parser")
    
    # 定位每个完整的书籍条目容器
    book_containers = page_soup.findAll("div", {"class": "item-ia"})
    
    for container in book_containers:
        item = {}
        item['type'] = "Public Domain Audiobook"
        
        # 提取标题(做容错处理,避免元素不存在报错)
        title_elem = container.find("div", {"class": "item-ttl"})
        if title_elem:
            item['title'] = title_elem.text.lstrip().strip()
            # 提取链接
            if title_elem.a:
                item['link'] = "https://archive.org" + title_elem.a["href"]
            else:
                item['link'] = ""
        else:
            item['title'] = "Unknown Title"
            item['link'] = ""
        
        # 提取作者(同样做容错)
        author_elem = container.find("span", {"class": "byv"})
        item['author'] = author_elem.text.strip() if author_elem else "Unknown Author"
        
        item['source'] = "LibriVox"
        item['base_url'] = "https://librivox.org/"
        data.append(item)

# 写入JSON文件
with open("./json/librivoxTest.json", "w") as writeJSON:
    json.dump(data, writeJSON, ensure_ascii=False)

关键修改点

  1. 定位父容器:从全局找标题/作者,改为找每个书籍的item-ia父容器,确保标题和作者属于同一本书。
  2. 移除嵌套循环:不再遍历全局作者列表,而是从当前书籍容器内直接提取对应作者,避免覆盖。
  3. 添加容错处理:增加元素存在性判断,避免页面结构变动导致脚本崩溃。

这样修改后,每个书籍的标题和作者就能正确匹配了,比如《A Book of Old English Ballads》会正确关联到George Wharton Edwards。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:12:39