在Beautiful Soup中提取s-item标签内超链接失败的技术求助
问题分析与解决方法
问题根源
你犯了两个典型的BeautifulSoup使用错误:
- li标签本身没有href属性:你定位的
s-item是li标签,产品链接实际嵌套在li内部的<a>标签里,直接访问tag['href']自然会报错。 - find_all('href')用法错误:
find_all()参数是标签名,不是属性名,你写find_all('href')是在找名为<href>的标签,这显然不存在,所以返回空列表。
正确的提取方法
要获取产品链接,需要先在li标签内找到对应的<a>标签,再从a标签中提取href属性。eBay列表页的产品链接通常在class为s-item__link的a标签里,代码修改如下:
from bs4 import BeautifulSoup import requests # 获取页面并解析 markup = requests.get( url='https://www.ebay.com/sch/i.html?_nkw=dyson+tower+fan&LH_ItemCondition=1000&ipg=240&_sop=12' ).content soup = BeautifulSoup(markup, 'html.parser') products = soup.find_all('li', attrs={'class': 's-item'}) # 提取链接的正确方式 tag = products[30] # 先找到li内部的a标签 product_link_tag = tag.find('a', class_='s-item__link') if product_link_tag: # 从a标签提取href属性 print(f'Link : {product_link_tag["href"]}') else: print('未找到产品链接标签')
补充说明
- 如果不确定a标签的class,可以直接用
tag.find('a')查找第一个a标签,但建议指定class避免匹配到无关的a标签(比如广告链接)。 - 实际爬取时建议增加异常处理,防止部分产品结构异常导致程序崩溃。
内容的提问来源于stack exchange,提问作者Chris MV
相关产品推荐
相关产品推荐

