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
相关产品推荐
相关产品推荐

