首页 > 解决方案 > 使用python请求提交搜索表单

问题描述

我需要使用请求从网站上抓取一些数据。网站就像https://www.example.com/tele/search.php. 该网站有如下部分:

<form action="search-result.php" method="post" name="sub">
    <label class="sr-only" for="usrname">Username</label>
    <div class="input-group mb-3">
        <div class="input-group-prepend">...</div>
        <input type="text" class="form-control" name="cnnum" placeholder="322112222 or 3520211114489" aria-label="Username" aria-describedby="basic-addon1">
    </div>
    <br>
    <button type="submit" class="btn btn-danger center-block" style="align-center ">Search</button>
</form>

所以我所做的是:

import requests
from bs4 import BeautifulSoup
S_URL = 'https://example.com/tele/search-result.php'
cnnum = '**********'
login_information = {
    'cnnum': cnnum
}

response = requests.post(S_URL, data=login_information)
print(response.content)

但它不起作用并显示不可接受的错误。我是新来的请求如此亲切的帮助。我不想使用硒。我想通过请求来做到这一点。

标签: pythonweb-scrapingpython-requests

解决方案


我已经能够找到您所指的网站,我确实看到您传递了正确的POST请求方法。

您尚未分享Errors您收到的内容。但我相信你确实有一个问题response code不是200

因此请注意,网站托管在CloudFlare防火墙保护之后,如果您发出多个POST请求,这可能会阻止您,因为这是防止浏览器自动化的任务之一。

还要考虑通过一个有效的User-Agent.

下面是一个简单的POST请求。

import requests

data = {'cnnum': '322112222'}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0'}

r = requests.post("https://simdatabaseonline.com/tele/search.php", data=data)

print(r.text)

推荐阅读