requests.session初始化会话和输入搜索词

问题描述 投票:1回答:1

我正在尝试创建一个转到this website的函数并在字段中输入邮政编码,然后执行逐项搜索,例如搜索框中的“鸡”。我从这开始。

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数据了。

我一直在检查邮政编码是否输入正确,以及如何使用该会话进行搜索,同时保留会话形成(位置)。

任何建议表示赞赏!

python python-3.x cookies web-scraping python-requests
1个回答
0
投票

Acquiring the required data:

查看页面源,提交数据(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>标签,因为它们无关紧要。

从这个表格中,我们需要的信息是:

  1. URL = 'https://shop.jewelosco.com/ecom/account/sign-in'
  2. method="post"暗示我们要使用requests.post()
  3. data = {'form': 'ZipCode', 'Register.ZipCode': '60637', 'Browse': ' Get Started '}

(注意:您必须使用<input>作为键,并使用name作为值,在表单数据中提供value标记中包含的所有值。)


Sending the data:

发送邮政编码的代码:

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 &amp; Shopping Tools' in r.text
True

Searching for items:

现在我们已成功发布了邮政编码,您可以使用此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'
© www.soinside.com 2019 - 2024. All rights reserved.