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

Python使用BeautifulSoup爬取href链接仅返回单个或None如何解决?

问题原因

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

  • 第一版extract函数中,links变量在循环内被反复覆盖,循环结束后仅保留最后一次赋值的链接,所以调用后只能得到1个结果
  • 第二版修改后的extract函数没有指定返回值,默认返回None,自然拿不到可用的链接列表

解决方法

你只需要在函数内初始化一个空列表存储所有链接,循环时把每个拼接好的链接追加到列表中,最后返回这个列表即可,修正后的代码如下:

import requests
from bs4 import BeautifulSoup

url = 'https://rappel.conso.gouv.fr'
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}

# 采集页面内容返回soup对象
def get_url(url):
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    return soup

def extract(soup):
    results = soup.find_all('div', {'class' : 'product-content'})
    # 初始化空列表存储所有链接
    link_list = []
    for item in results:
        # 此处原代码的文本处理逻辑没有接收返回值,不需要可直接删除
        item.find('a', {'class' : 'product-link'}).text.replace('','').strip()
        link = url + item.find('a', {'class' : 'product-link'})['href']
        # 把当前链接追加到列表
        link_list.append(link)
    # 返回完整的链接列表
    return link_list

soup = get_url(url)
all_links = extract(soup)
print(all_links)

后续使用示例

拿到返回的all_links列表后,你就可以直接遍历列表爬取每个详情页内容,后续存数据库的逻辑也可以直接在遍历过程中实现:

for detail_url in all_links:
    # 调用你自己编写的详情页爬取、解析、存库逻辑即可
    print(f"正在处理:{detail_url}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:05