【问题标题】:How can I identify the correct td tag using bs4 in python when HTML code is inconsistent当HTML代码不一致时,如何在python中使用bs4识别正确的td标签
【发布时间】:2016-08-12 23:37:05
【问题描述】:

我在 Python 中使用 BeautifulSoup4 来解析一些 HTML 代码。我已经设法深入到正确的表并识别 td 标签,但我面临的问题是标签中的样式属性应用不一致,这使得获取正确 td 标签的任务成为真正的挑战.

我试图提取的数据是一个日期字段,但在任何时候都会有多个使用 CSS 隐藏的 td 标签(可见的内容取决于 HTML 代码中其他地方选择的选项值)。

实际例子:

<td style="display: none;">01/03/2016</td>
<td style="display: table-cell;">27/10/2015</td> <-- this is the tag I want

<td style="display:none">23/02/2016</td>
<td style="">09/05/2011</td> <-- this is the tag I want
<td style="display: none;">29/03/2011</td>
<td style="display:none">19/10/2010</td>

<td>27/10/2015</td> <-- this is the tag I want
<td style="display: none">01/03/2016</td>
<td style="display: none">22/03/2016</td>

<td style="display:none">11/04/2015</td>
<td style="display: table-cell;">02/02/2016</td> <-- this is the tag I want
<td style="display: none">18/10/2013</td>

我将如何排除/删除不正确的项目(样式为 display:nonedisplay: none)以留下我真正想要的项目?

【问题讨论】:

    标签: python html beautifulsoup bs4


    【解决方案1】:

    使用列表 comp 过滤 td,仅当 td 在集合{"display:none", "display: none;","display: none;","display: none"} 中没有样式属性时才保留:

    In [8]: h1 = """"<td style="display: none;">01/03/2016</td>
       ...: <td style="display: table-cell;">27/10/2015</td>"""
    
    In [9]: h2 = """"<td style="display:none">23/02/2016</td>
       ...: <td style="">09/05/2011</td> <-- this is the tag I want
       ...: <td style="display: none;">29/03/2011</td>
       ...: <td style="display:none">19/10/2010</td>"""
    
    In [10]: h3 = """"<td>27/10/2015</td> <-- this is the tag I want
       ....: <td style="display: none">01/03/2016</td>
       ....: <td style="display: none">22/03/2016</td>"""
    
    In [11]: h4 = """<td style="display:none">11/04/2015</td>
       ....: <td style="display: table-cell;">02/02/2016</td> <-- this is the tag I want
       ....: <td style="display: none">18/10/2013</td>"""
    
    In [12]: ignore = {"display:none", "display: none;", "display: none;", "display: none"}
    
    In [13]: for html in [h1, h2, h3, h4]:
       ....:         soup = BeautifulSoup(html, "html.parser")
       ....:         print([td for td in soup.find_all("td") if not td.get("style") in ignore])
       ....:     
    [<td style="display: table-cell;">27/10/2015</td>]
    [<td style="">09/05/2011</td>]
    [<td>27/10/2015</td>]
    [<td style="display: table-cell;">02/02/2016</td>]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多