如何用Python BeautifulSoup爬取面包屑中的第二个span标签内容
问题解决方法
你当前代码中tag2 = item1.span.a的写法,默认只会匹配节点下第一个符合条件的span内的a标签,因此只能拿到第一级面包屑的"Computers & Laptops"内容。要获取第二级的"Laptops"内容,推荐用以下两种稳定写法,不会受标签嵌套层级变动影响:
方法1:直接按面包屑链接类名批量选取
所有面包屑的跳转a标签都带有breadcrumb_item_anchor类名,find_all返回的列表顺序和页面展示顺序完全一致,直接按索引取值即可:
# 定位面包屑外层容器 breadcrumb_container = soup1.find('div', id='J_breadcrumb_list') # 获取所有面包屑链接,顺序和页面从上到下展示的层级一致 all_crumb_links = breadcrumb_container.find_all('a', class_='breadcrumb_item_anchor') # 索引0:Computers & Laptops # 索引1:Laptops(你要的第二级内容) # 索引2:Traditional Laptops second_level_text = all_crumb_links[1].get_text(strip=True)
方法2:按面包屑列表项选取
每一级面包屑都对应一个带breadcrumb_item类名的li标签,先取所有li项再按索引拿内容也可以:
breadcrumb_container = soup1.find('div', id='J_breadcrumb_list') all_crumb_items = breadcrumb_container.find_all('li', class_='breadcrumb_item') second_level_text = all_crumb_items[1].get_text(strip=True)
额外注意
你现有代码里的URL模板存在重复拼接域名的问题:
# 错误写法,会拼出https://www.lazada.vn//www.lazada.vn/xxx这种无效地址 template1 = 'https://www.lazada.vn//www.lazada.vn/products/{}.html'
实际爬取时需要修正成正确的路径格式,否则会请求失败。
内容的提问来源于stack exchange,提问作者Mr.Bean
相关产品推荐
相关产品推荐

