在继续我的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)旁边的数字。现在我能够得到这些数字,但我也得到了很多额外的coenter code here
ntent,我不知道为什么。
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
属性,但很可能您可以使用以下内容来确保它是一个数量input
标签。你可以假设有一个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
属性=值对,则执行速度会更快:
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)