python - 使用 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
解决方案
问题出在这一行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/
推荐阅读
- node.js - 为什么模式字段没有使用节点 js 保存在数据库中
- jwt - 我如何添加授权:“JWT
“到 http 请求?在 Nuxt.js 中 - java - Resilience4j 使用 CompletionStage 重试
- python - 自定义 Python 日志格式化程序适用于 fileConfig 但不适用于 dictConfig?
- playframework-2.6 - Play framework 2.6 在每个请求之前运行
- robotframework - 如何将命令行变量作为参数传递给 RobotFramework Listener?
- c# - Blazor 服务器后台任务
- optimization - LLVM 能否决定 Machine Function Pass 的执行顺序?我的 Pass 生成的代码被优化弄乱了
- python - Inline Telegram Bot 发送我未平仓的币安期货头寸,但我的头寸数据在第一次命令启动后没有更新?
- swift - Multiplatform NavigationView 的 SwiftUI 问题