gpt4 book ai didi

html - 如何使用 BeautifulSoup 在 Python 中隔离只有一到两位数的解析结果

转载 作者:行者123 更新时间:2023-11-28 00:37:07 25 4
gpt4 key购买 nike

在继续我的 FreshDirect 计划时,我希望获得我的常备订单中的数量值。我需要获取这些值,以便最终使订购过程自动化,但现在这就是我所坚持的。有没有办法只获取项目数量的值?

我尝试做的是解析 HTML 中的“输入”标签。然后我使用 re.sub 来尝试隔离数字。我仍然得到一大堆值,包括字母。作为引用,我要解析的 HTML 如下所示:

<input id="qty_cartline_change_-1313013247" class="qty" type="text" name="qty" value="1" maxlength="4" data-component="quantitybox.value" data-productdata-name="quantity">
def get_values():
for items in inputs:
standing_order_value = str(items.get('value'))
print(standing_order_value)
for node in standing_order_value:
re.sub(r'\D', '', node)
current_value = {'Quantity':standing_order_value}
print(current_value)

我希望它只获取“value=”旁边的数字(应该是 1)对于我库存中的所有元素。现在我能够得到这些数字,但我也得到了很多额外的共同enter code herentent,我不确定为什么。

What I get that is good: 1
{'Quantity': '1'}
1
{'Quantity': '1'}
1
{'Quantity': '1'}
1
{'Quantity': '1'}
1
{'Quantity': '1'}
1
{'Quantity': '1'}
1
What I get that I don't want: 
atc_a200237b-8c88-4611-8582-3d8dd3eba7c5
{'Quantity': 'atc_a200237b-8c88-4611-8582-3d8dd3eba7c5'}
gro_pid_4010985
{'Quantity': 'gro_pid_4010985'}
/pdp.jsp?productId=gro_pid_4010985&catId=gro_snack_nubars&variantId=dyf_scr_ord1
{'Quantity': '/pdp.jsp?productId=gro_pid_4010985&catId=gro_snack_nubars&variantId=dyf_scr_ord1'}
gro_snack_nubars
{'Quantity': 'gro_snack_nubars'}
dyf_scr_ord1
{'Quantity': 'dyf_scr_ord1'}
GRO4010985
{'Quantity': 'GRO4010985'}
EA
{'Quantity': 'EA'}
EA

最佳答案

如果你使用 BeautifulSoup,你可以使用 attribute = value 选择器

soup = BeautifulSoup(your_html, 'lxml')
values = [item['value'] for item in soup.select("input[value]")]

您可以查看哪种选择器组合可提供最佳结果。我在上面添加了 value 属性以确保 input 标签具有 value 属性,但您可能可以使用以下内容来确保它是一个数量 输入标签。您可以假设有一个 value 属性。

values = [item['value'] for item in soup.select("input[data-productdata-name=quantity]")]

不假设有一个 value 属性并指定必须有:

values = [item['value'] for item in soup.select("input[value][data-productdata-name=quantity]")]

这可能是最可靠的。


如果您确定 productdata-name=quantity attribute = value 对仅出现在具有 value 属性的数量输入值中,那么这样做会更快:

values = [item['value'] for item in soup.select("[data-productdata-name=quantity]")]

单数的第一个匹配版本是:

value = soup.select_one("[data-productdata-name=quantity]")['value']

例子:

from bs4 import BeautifulSoup

html = '''<input id="qty_cartline_change_-1313013247" class="qty" type="text" name="qty" value="1" maxlength="4" data-component="quantitybox.value" data-productdata-name="quantity">'''

soup = BeautifulSoup(html, 'lxml')
values = [item['value'] for item in soup.select("input[value]")]
print(values)

关于html - 如何使用 BeautifulSoup 在 Python 中隔离只有一到两位数的解析结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com