首页 > 解决方案 > 使用 Beautifulsoup find_all() .get('href') 时出错

问题描述

我正在尝试为名为“category-list”的特定类下的链接抓取 html 每个链接都位于 h4 标签下(我忽略了它的父 h3 标签):

<ul class="category-list">
      <li class="category-item">
       <h3>
        <a href="/derdubor/c/alarm_og_sikkerhet/">
         Alarm og sikkerhet
        </a>
       </h3>
       <ul>
        <li>
         <h4>
          <a href="/derdubor/c/alarm_og_sikkerhet/brannsikring/">
           <span class="category-has-customers">
            Brannsikring
           </span>
           (1)
          </a>
         </h4>
        </li>
       </ul>
      </li>

...

我用于抓取 html 的代码如下:

r = request.urlopen(str_top_url)

soup = BeautifulSoup(r.read(),'html.parser')

tag_category_list = soup.find('ul', class_ = 'category-list')

tag_items = tag_category_list.find_all('h4')

for tag_item in tag_items.find_all('a'):
    print(tag_item.get('href'))

我得到错误:

"ResultSet object has no attribute '%s'. You're probably treating a list of items like a single item..."

阅读关于 crummy 的 BeautifulSoup 手册,看起来您可以在标签对象上使用属于 BeautifulSoup 类的相同方法?我似乎无法弄清楚我做错了什么......

我在stackoverflow上尝试了很多她的答案。但无济于事...

问候 MH

标签: pythonpython-3.xbeautifulsoup

解决方案


问题出在这一行for tag_item in tag_items.find_all('a'):。您应该首先遍历 tag_items 和 find_all('a') 项目。这是编辑后的代码:

from bs4 import BeautifulSoup

soup = BeautifulSoup('<ul class="category-list"><li class="category-item"><h3><a href="/derdubor/c/alarm_og_sikkerhet/">Alarm og sikkerhet</a></h3><ul><li><h4><a href="/derdubor/c/alarm_og_sikkerhet/brannsikring/"><span class="category-has-customers">Brannsikring</span>(1)</a></h4></li></ul></li>','html.parser')

tag_category_list = soup.find('ul', class_ = 'category-list')

tag_items = tag_category_list.find_all('h4')

for elm in tag_items:
    for tag_item in elm.find_all('a'):
        print(tag_item.get('href'))

结果如下: /derdubor/c/alarm_og_sikkerhet/brannsikring/


推荐阅读