如何将 HTML 标签的属性值放入列表中?

Posted

技术标签:

【中文标题】如何将 HTML 标签的属性值放入列表中?【英文标题】:How to get attribute values of HTML tags into a list? 【发布时间】:2022-01-05 07:18:26 【问题描述】:

我想从如下表行列表中提取“id”属性的值: <tr id="8LVPCRJGR" role="row" class="odd">,来自 BeautifulSoup4。在这个示例标签的情况下,我想要“8LVPCRJGR”部分。

我尝试了这段代码(是的,我确实导入了 bs4 和请求模块):

url = "https://brawlify.com/stats/club/V8GVVR0R"
result = requests.get(url).text
doc = BeautifulSoup(result, "html.parser")

tag = doc.find_all('tr')

attribute = tag['id']

print(attribute)

它应该打印出一个包含所有值的列表,但没有打印出来。控制台是空白的。

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

find_all 将返回一个列表

你应该遍历这个列表并提取类似这样的 id 属性

编辑

关注@chitown88 评论 您可以将 if 语句标识到循环中 对于@Zaid Hussain 的评论 显然,您无法从 HTML 页面获取 tr 标记,因为在将 requests.get(url).text 加载到 BeautifulSoup 之前未执行 javascript 代码我建议您尝试检查 requests.get(url).text 的返回,如果是这种情况,我建议通过例如 chrome 驱动程序使用 selenium 打开页面并将 HTML 代码传递给 BeatifulSoup 或仅使用 Selenium 完成工作

tags=doc.find_all('tr')
attribute= [tag['id'] for tag in tags if tag['id'] ]
print(attribute)

【讨论】:

如果tags 中的tag 没有'id' 的属性值,则会抛出错误 不。控制台仍然是空的。【参考方案2】:

几个问题。首先,标签是元素列表,特别是所有<tr> 标签元素。其次,并不是所有的<tr> 标签都有'id' 属性。

所以你需要为此添加一些逻辑:

import requests
from bs4 import BeautifulSoup


url = "https://brawlify.com/stats/club/V8GVVR0R"
result = requests.get(url).text
doc = BeautifulSoup(result, "html.parser")

tag = doc.find_all('tr')

attribute = [x['id'] for x in tag if 'id' in x.attrs]

输出:

print(attribute)
['8LVPCRJGR', '29G9VJJC', '2YP08GUG8', 'UY8PVUPL', 'VV2RRRGG', '20RQQ08U9', 'VJ00J8Y8', '200PG2VLP', '28QV0RJVV', 'YRLPJ80J', 'PRLV99U89', '9QJLQGGU', '88UYYG0U', '9PG8RUVJ', 'YP9UQ8CQ', '9J8LRGQU2', '2LPGYQVV9', '8C8CJ0UJU', 'GUGJLLRG', '9Q0VCV2J', '2RVYVL8YL', 'JP0VGC2P', '280GY2R2C', '2PRLQPJJY', '8CGJGPYJ9', '89RYCVQJ0', '80GVU28CC', 'UV0CPU2Q', '9RGG9J08J', 'Y2PQ8090R']

【讨论】:

不敢相信我没有找到一个解释这一点的网站或 YouTube 视频;-; 它在 BeautifulSoup 文档中。以及许多其他 SO 帖子【参考方案3】:

选择更具体一点 - 所有<tr>id 并迭代结果集以获取每个id

[x['id'] for x in soup.select('tr[id]')]

示例

import requests
from bs4 import BeautifulSoup

r = requests.get('https://brawlify.com/stats/club/V8GVVR0R')
soup = BeautifulSoup(r.text, "html.parser")

attribute = [x['id'] for x in soup.select('tr[id]')]
print(attribute)

输出:

['8LVPCRJGR',
 '29G9VJJC',
 '2YP08GUG8',
 'UY8PVUPL',
 'VV2RRRGG',
 '20RQQ08U9',
 'VJ00J8Y8',
 '200PG2VLP',
 '28QV0RJVV',...]

【讨论】:

以上是关于如何将 HTML 标签的属性值放入列表中?的主要内容,如果未能解决你的问题,请参考以下文章

html中<select>标签用法解析及如何设置select的默认选中状态

Html5新增加的属性

vue.js 中的v-for可以将遍历出来的值放入标签属性吗

如何把jquery的值放入img标签的src里面

HTML的标签分类有人明白吗?

如何将图片放入页脚标签中? [复制]