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

BeautifulSoup爬取书籍链接时函数仅返回列表首元素问题求解

问题原因

代码仅返回第一个链接,由3处逻辑问题导致:

  • 存储链接的books_urls列表定义在循环内部,每次遍历新书条目时都会重置为空列表,之前存储的链接会被直接清空
  • return语句写在循环体内部,程序拿到第一本书的链接后就会直接终止函数运行,不会执行后续遍历
  • 存在冗余代码:books_urls=list(books_urls)无实际作用,append操作后的变量本身就是列表类型,不需要重复转换
修正后可运行代码

仅使用requests+BeautifulSoup实现,可正确提取第一页所有20本书的详情页链接:

import requests
from bs4 import BeautifulSoup


def page1_url(page1):
    # 存储链接的列表必须放在循环外初始化
    books_urls = []
    response = requests.get(page1)
    # 校验请求状态,请求失败时直接抛出异常方便排查
    response.raise_for_status()
    data = BeautifulSoup(response.text, 'html.parser')
    
    # 直接定位所有h3标签下的a标签,简化嵌套循环
    for a_tag in data.select('h3 a'):
        relative_link = a_tag['href']
        full_link = base_url + relative_link
        books_urls.append(full_link)
    
    # 所有链接收集完成后再返回结果
    return books_urls


allPages = [
    'http://books.toscrape.com/catalogue/page-1.html',
    'http://books.toscrape.com/catalogue/page-2.html'
]
base_url = 'http://books.toscrape.com/catalogue/'
bookURLs = page1_url(allPages[0])
print(f"共提取到{len(bookURLs)}本书的链接:")
print(bookURLs)
后续爬取提示

拿到所有详情页链接后,遍历bookURLs逐个发起请求,即可提取单本书的详情:

  • 书籍标题:对应页面的h1标签内容
  • 库存数量:对应class为availability的p标签内容,提取后做简单字符串处理就能拿到具体库存数字
  • 价格、评分等信息也可以通过对应标签定位提取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:54:21