Python 使用BeautifulSoup查找HTML元素

Python 使用BeautifulSoup查找HTML元素,python,html,python-3.x,beautifulsoup,Python,Html,Python 3.x,Beautifulsoup,我正试图从一个充斥着各种不同标签的网站上解析这个HTML。下面是一个HTML示例,代码中带有字符串“failed” <g style="opacity: 1;" class="node enter failed" transform="translate(743.1833267211914,17.941665649414062)" id="return_qtd_validate" data-toggle="tooltip" data-original-title="Task_id: ret

我正试图从一个充斥着各种不同标签的网站上解析这个HTML。下面是一个HTML示例,代码中带有字符串“failed”

<g style="opacity: 1;" class="node enter failed" transform="translate(743.1833267211914,17.941665649414062)" id="return_qtd_validate" data-toggle="tooltip" data-original-title="Task_id: return_qtd_validate<br>Run: 2018-11-27T06:00:00<br>Operator: PythonOperator<br>Started: 2018-11-28T06:09:40.070799<br>Ended: 2018-11-28T06:10:10.649864<br>Duration: 30.5791<br>State: failed<br>"><rect rx="5" ry="5" x="-157.625" y="-17.94166660308838" width="315.25" height="35.88333320617676" fill="#fff" style="fill: rgb(255, 242, 242);"></rect><g transform="translate(-147.625,-7.941666603088379)"><text text-anchor="left" style="; fill:#000;"><tspan dy="1em" x="1">return_qtd_validate</tspan></text></g></g>
<g style="opacity: 1;" class="node enter failed" transform="translate(579.2583389282227,17.941665649414062)" id="update_release_yyyy_mm_dd__jpe4_update_release_yyyy_mm_dd_source_validate" data-toggle="tooltip" data-original-title="Task_id: update_release_yyyy_mm_dd__jpe4_update_release_yyyy_mm_dd_source_validate<br>Run: 2019-01-14T18:00:00<br>Operator: PythonOperator<br>Started: 2019-01-15T18:02:17.374226<br>Ended: 2019-01-15T18:02:21.419314<br>Duration: 4.04509<br>State: failed<br>"><rect rx="5" ry="5" x="-314.70001220703125" y="-17.94166660308838" width="629.4000244140625" height="35.88333320617676" fill="#fff" style="fill: rgb(255, 242, 242);"></rect><g transform="translate(-304.70001220703125,-7.941666603088379)"><text text-anchor="left" style="; fill:#000;"><tspan dy="1em" x="1">update_release_yyyy_mm_dd__update_release_yyyy_mm_dd_source_validate</tspan></text></g></g>
请注意,所有ID标记都是不同的。也许像这样的东西会有用

for item in pool.findAll('g', 'id' = re.compile(<>'')): 
    all_errors.append(item.string)
对于pool.findAll('g','id'=re.compile('')中的项:
所有错误.append(item.string)
基本上,我想找到每个与之关联的ID


没有任何内容附加到
所有错误中,但肯定会有几个字符串被推到该列表中。可能
g
id
class
已关闭。我不确定问题到底出在哪里。

你做错了。如果您观察到,
class
具有属性
节点输入失败
不是
id
<代码>id
具有值
返回\u qtd\u验证
。所以你的代码应该是:

for link in all_links: 
    wd.get(link) 
    errors = requests.get(link) 
    data = errors.text 
    pool = bs(data, 'lxml')
    for item in pool.findAll('g', attrs={'id' : 'return_qdt_validate'}): 
        all_errors.append(item.string)
编辑:

根据更新的问题和注释,您需要找到一个与所有错误匹配的静态属性。在您的示例中,我可以看到,在您显示的两个错误示例中,
class
属性都是静态的。因此,此代码应该可以工作(只需将
id
替换为
class


谢谢,但是那些ID标签会一直改变。ID是相对于我正在处理的URL的。我必须循环浏览1100个URL并检查每个URL的ID,以查找包含“错误”的字符串。我注意到你更新了问题,请检查我更新的答案。你介意共享链接吗?
for link in all_links: 
    wd.get(link) 
    errors = requests.get(link) 
    data = errors.text 
    pool = bs(data, 'lxml')
    for item in pool.findAll('g', attrs={'id' : 'return_qdt_validate'}): 
        all_errors.append(item.string)
for link in all_links: 
    wd.get(link) 
    errors = requests.get(link) 
    data = errors.text 
    pool = bs(data, 'lxml')
    for item in pool.findAll('g', attrs={'class' : 'node enter failed'}): 
        all_errors.append(item.string)