问题:如何从没有标识符的 <td> 属性中仅从 web 中提取数字(by beautiful soup)

在得到对我的 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>

解答

如果我正确理解了您的问题,您需要找到下一个<td>标记,其中只有整数。

  • 您可以使用正则表达式作为过滤器。

  • find_next- 查找与过滤器匹配的下一个元素。

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

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

点击阅读全文
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐