如何将 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的默认选中状态