繁体   English   中英

使用 BeautifulSoup 查找所有 HTML 元素

[英]Using BeautifulSoup to FindAll HTML Elements

我试图从一个充斥着各种不同标签的网站解析这个 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>

我正在使用 BeautifulSoup,下面的代码将一堆链接附加到列表中。 这部分工作正常。 当我尝试搜索错误并将所有错误(来自我循环的所有链接)附加到另一个列表时,我陷入了困境。

    all_links.append(url)

all_errors = []
for link in all_links:
    wd.get(link)
    errors  = requests.get(link)
    data = errors.text
    pool = bs(data, 'lxml') # where html contains the whole html as string
    for item in pool.findAll('g', attrs={'id' : 'node enter failed'}):
        all_errors.append(item.string)

请注意,所有 ID 标签都不同。 也许这样的事情会奏效......

for item in pool.findAll('g', 'id' = re.compile(<>'')): 
    all_errors.append(item.string)

基本上,我想找到与class="node enter failed"关联的每个 ID。

all_errors没有附加任何all_errors但肯定应该有几个字符串被推入该列表。 也许gidclass已关闭。 我不确定问题出在哪里。

你这样做是错的。 如果您观察到, class具有属性node enter failed而不是id id具有值return_qtd_validate 所以你的代码是:

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属性在您显示的两个错误示例中都是静态的。 所以这段代码应该可以工作(只需用class替换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={'class' : 'node enter failed'}): 
        all_errors.append(item.string)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM