首页 > 解决方案 > 如何从没有标识符的属性中仅从网络中提取数字(通过美丽的汤)

问题描述

在得到对我的 http 请求的响应后,我需要在响应中识别 ID 并为其分配值。基本上,我执行加载页面的程序,按 ID 搜索产品,然后读取网页内容并为该产品分配实际库存价值。

test = s.get(test)
soup = BeautifulSoup(test.text, "html.parser")
table = soup.find("table",class_="table")
code = table.find("small",class_="code")

listTd=table.findAll("td") #iam able to find all td where are data saved.
#Here i don´t know how to identify the corrrect td which contains only int values ( it pressents actual number of products on stock, i need extract that).#


#Here is response from web:
[<td>
<a href="/Products/19321">
<small class="code">Code: 64SPW.100</small>
<span class="product_description">
<span class="description">Ø10x22x72 ØG.10</span>
</span>
</a>
</td>, <td>
                        72.37 EUR/NP
                        <br/>
<span class="iva">(excluding VAT 0%)</span>
</td>, <td>
                        55%
                    </td>, <td>
                        32.57 EUR/NP
                        <br/>
<span class="iva">(excluding VAT 0%)</span>
</td>, <td>
44                    </td>, <td class="shopping">
<div class="add_to_cart">
<form action="/Products/19321/AddToCart?returnUrl=%2FProducts%2FSearch%3Fquery%3D64SPW.100" method="post"> <div class="input-append">
<input autocomplete="off" class="span1" name="quantity" type="text" value="1"/>
<span class="add-on">NP</span>
</div>
<input class="btn btn-primary loader" type="submit" value="Add to cart"/>
</form>
</div>
</td>, <td>
<a href="/Products/19322">
<small class="code">Code: 64SPW.100C</small>
<span class="product_description">
<span class="description">Ø10x22x72 ØG.10 Cer-A</span>
</span>
</a>
</td>, <td>
                        79.44 EUR/NP
                        <br/>
<span class="iva">(excluding VAT 0%)</span>
</td>, <td>
                        55%
                    </td>, <td>
                        35.75 EUR/NP
                        <br/>
<span class="iva">(excluding VAT 0%)</span>
</td>, <td>
8                    </td>,

正如您在代码中看到的那样:代码:64SPW.100,这是因为我取了 64SPW.100 的值并在网上搜索它,并且必须以某种方式将它与值 44 链接起来。但是我找不到任何标识符这个值并分配给被搜索的正确代码无论如何如何做到这一点?

这里是否有任何可能的方法如何将 Code : "value" 与 44 <\td> 中的正确值联系起来?我无法编写标尺,它将在正确的 Code: 64SPW.100 之后找到属性,并确定该属性中只有 int 数字并将其分配给代码?

因此,对于响应中的每个代码都应该清楚,如果有序列 Code:64SP.100 将与最近的序列 <.td> 链接,只包括 int 数字 <\td>

标签: pythonsearchweb-scrapingbeautifulsoupint

解决方案


如果我正确理解了您的问题,您需要找到下一个<td>仅包含整数的标签。

code.find_next('td', text=re.compile(r'^[\n\s]*\d+[\n\s]*$')

您可能需要针对您的具体情况调整正则表达式。我只匹配带有空格或换行符的正整数。


推荐阅读