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

使用BeautifulSoup提取div下a标签的href时持续报错,求助解决

Python BeautifulSoup提取a标签href的正确方法

问题场景

我用Python的BeautifulSoup爬取网页时,通过以下代码获取了指定class的div标签集合:

category_tag = soup.find_all('div' , {'class': '_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8'})

返回的category_tag输出如下:

<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318158031">Action &amp; Adventure</a></div>,
<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318052031">Arts, Film &amp; Photography</a></div>,
<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318064031">Biographies, Diaries &amp; True Accounts</a></div>,
<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318068031">Business &amp; Economics</a></div>,
<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318073031">Children's &amp; Young Adult</a></div>,
<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318104031">Comics &amp; Mangas</a></div>,
<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318105031">Computing, Internet &amp; Digital Media</a></div>,
<div class="_p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf _p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8" role="treeitem"><a href="/gp/bestsellers/books/1318118031">Crafts, Home &amp; Lifestyle</a></div>,

每个div内部都包含带href属性的a标签,但提取href时遇到问题:

  • 执行以下代码报错:
category_url_tag = category_tag.find('a')['href']
  • 执行以下代码返回全为None的列表:
category_url = []
for tag in category_tag:
    category_url.append(tag.get('href'))
print(category_url)

问题原因

  1. soup.find_all()返回的是标签列表,不能直接调用find()方法,这是第一个报错的核心原因。
  2. 第二个代码里直接给div标签调用get('href'),但href属性属于div内部的a标签,不是div本身,所以返回None。

正确解决方案

方法一:遍历div列表,逐个提取内部a标签的href

category_url = []
for tag in category_tag:
    # 先找到当前div下的a标签,再获取href属性
    a_tag = tag.find('a')
    if a_tag:  # 避免找不到a标签时报错
        category_url.append(a_tag.get('href'))
print(category_url)

方法二:直接用CSS选择器一步到位

可以跳过先找div的步骤,直接定位到目标class下的a标签:

category_url = [a.get('href') for a in soup.select('div._p13n-zg-nav-tree-all_style_zg-browse-item__1rdKf._p13n-zg-nav-tree-all_style_zg-browse-height-large__1z5B8 a')]
print(category_url)

注意:CSS选择器中同一个元素的多个class之间用.连接,不需要空格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:36:20