Python 基于正则表达式搜索范围的漂亮汤

Python 基于正则表达式搜索范围的漂亮汤,python,beautifulsoup,Python,Beautifulsoup,我有一个可怕的html页面需要解析 我希望能抓住H2的标题——我已经做到了。我还需要搜索库存和订单上的库存。最后两个字段以跨距形式保留。我不能单独使用class:info,因为我需要忽略这个类的许多其他字段。我认为唯一的方法是用正则表达式搜索跨度 这里是一些HTML示例-注意,我已经删除了很多我不感兴趣的HTML,这些HTML由 .. .. <div class="innerListing"> .. .. <div class="title">

我有一个可怕的html页面需要解析

我希望能抓住H2的标题——我已经做到了。我还需要搜索库存和订单上的库存。最后两个字段以跨距形式保留。我不能单独使用class:info,因为我需要忽略这个类的许多其他字段。我认为唯一的方法是用正则表达式搜索跨度

这里是一些HTML示例-注意,我已经删除了很多我不感兴趣的HTML,这些HTML由

..
..
<div class="innerListing">       
..
..    
    <div class="title">
            <a id="btl00_ContentPlaceHolder105" href="http://****"><h2 id="btl00_ContentPlaceHolder1_Ctrl_SearchResultsWrapper_ctl05_advertTitleWrapper" title="TitleText">
               TitleText</h2></a>
            <p class="sku">
            </p>
        </div>
...
        <div class="layout">

            <span id="btl00_ContentPlaceHolder1_Ctrl_SearchResultsWrapper_ctl05_ProductTypeLabel" class="label">Product Type:</span><span id="ctl00_ContentPlaceHolder1_Ctrl_SearchResultsWrapper_ctl05_ProductType" class="info">3 seat sofa</span>
          ...
            <span id="btl00_ContentPlaceHolder1_Ctrl_SearchResultsWrapper_ctl05_StockLabel" class="label">Stock:</span><span id="ctl00_ContentPlaceHolder1_Ctrl_SearchResultsWrapper_ctl05_Stock" class="info">5</span>
          ...
          <span id="btl00_ContentPlaceHolder1_Ctrl_SearchResultsWrapper_ctl05_StockOnOrderLabel" class="label">On Order:</span><span id="ctl00_ContentPlaceHolder1_Ctrl_SearchResultsWrapper_ctl05_Stockonorder" class="info">1</span>
         </div>   

使用regex搜索的最佳方式是什么?

如果我正确理解了您的问题,您是否只希望
id
属性中包含
库存的所有
span
s

如果是这样,您可以更改第二个
for
循环,并忽略与Stock/StockonOrder无关的循环:

#For Spans
for layout in soup.find_all("div", attrs={'class':'layout'}):
    for info in layout.find_all("span", attrs={'class':'info', "id":True}):
        if "Stock" in info["id"]:
            print (info.text.strip())

注意:您需要在
find_all
调用(
“id”:True
)中添加一个额外属性,以避免任何键错误。这只是为了防止一些span标记没有任何id,以便我们可以将它们过滤掉。

我尝试了你的建议,但遇到了一个错误:keyrerror:'id'@Leehbi自从我编辑代码以来,你有没有尝试过我的代码?我在第二个
find_all
oh yes-sorted的
attrs=
中添加了一点。
#For Spans
for layout in soup.find_all("div", attrs={'class':'layout'}):
    for info in layout.find_all("span", attrs={'class':'info', "id":True}):
        if "Stock" in info["id"]:
            print (info.text.strip())