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