我尝试创建一个转到this website的函数并在字段中输入邮政编码,然后执行逐项搜索,例如" chicken"在搜索框中。我从这开始。
import requests
s = requests.session()
input_data = {"Register_ZipCode": "60637"}
r = s.post("https://shop.jewelosco.com/ecom/home", login_data)
r2 = s.get("https://shop.jewelosco.com/ecom/home")
在此之后,我想以某种方式保留上面的输入信息并运行如下搜索。
chicken = request.get("https://shop.jewelosco.com/ecom/search?source=searchBox&searchTerm=chicken")
我终于可以开始抓取html数据了。
我一直在检查邮政编码是否输入正确以及如何使用该会话进行搜索,同时保留会话形成(位置)。
感谢任何建议!
答案 0 :(得分:0)
查看页面源,提交数据(zipcode)的表单是:
<form action="/ecom/account/sign-in" method="post">
<input type="hidden" name="form" value="ZipCode" />
<div class="field id-ZipCode">
<input data-val="true" data-val-required="Zip Code is required." data-val-sdcexactlength="Zip Code must be 5 characters long." data-val-sdcexactlength-max="5" data-val-sdcexactlength-min="5" data-val-sdcnumeric="Zip Code must contain numeric characters only." data-val-sdcnumeric-pattern="^[0-9]*$" id="Register_ZipCode" maxlength="5" name="Register.ZipCode" placeholder="Enter Your Zip Code" type="text" value="" />
</div>
<div class="btn btn-getstarted submit btn-round " onclick="javascript:trackLinkZipGetStarted();">
<input class="submit btn-round " name="Browse" type="submit" value=" Get Started "></input>
</div>
</form>
我删除了一些<div>
代码,因为它们无关紧要。
从这个表格中,我们需要的信息是:
URL = 'https://shop.jewelosco.com/ecom/account/sign-in'
method="post"
表示我们要使用requests.post()
data = {'form': 'ZipCode', 'Register.ZipCode': '60637', 'Browse': ' Get Started '}
(注意:您必须使用<input>
作为密钥并name
提供表单数据中value
标记中包含的所有值作为价值。)
发送邮政编码的代码:
data = {'form': 'ZipCode', 'Register.ZipCode': '60637', 'Browse': ' Get Started '}
with requests.Session() as s:
r = s.post('https://shop.jewelosco.com/ecom/account/sign-in', data=data)
如果您检查了回复历史记录和当前网址,您会看到它被重定向到https://shop.jewelosco.com/ecom/home
,这是我们要从中获取数据的网址。
>>> r.status_code
200
>>> r.url
https://shop.jewelosco.com/ecom/home
>>> r.history
[<Response [302]>]
要检查我们是否已成功发布此数据,您可以使用此功能:
>>> 'Top Offers & Shopping Tools' in r.text
True
现在我们已成功发布了邮政编码,您可以使用此Session
对象(s
)搜索您想要的任何内容。
完整代码:
data = {'form': 'ZipCode', 'Register.ZipCode': '60637', 'Browse': ' Get Started '}
with requests.Session() as s:
s.post('https://shop.jewelosco.com/ecom/account/sign-in', data=data)
r = s.get('https://shop.jewelosco.com/ecom/search?source=searchBox&searchTerm=chicken')
print('Perdue Chicken Ground Fresh - 16 Oz' in r.text)
# prints 'True'