首页 > 解决方案 > 使用 python 抓取 AJIAX 页面:如何复制 POST 请求

问题描述

我是网络抓取的新手,想 通过复制 AJIAX 请求来抓取此表单的结果。如何通过下面的表单数据发出请求?

GOTOSTEP: 2
LANG: it
flag_ar: 
trta: ISCPOZ
datea: 12/02/2019
res: 
paxan: 1
paxbn: 0
paxin: 0
ad: 0
veicolo: 
rimorchio: 
exl: 
exa: 
bic: 0
bag1: 0
bag2: 0
bag3: 0
dnr: 0
trtr: 
dater: 
rres: 
rpaxan:  
pol_insurance: 
Q1: 000004
Q2: 000001
Q3: GESTOUR - CALL CENTER
Q9: 0
JSON_AGE_DATA: {"STATUS":"OK","STATUS_MSG":"","Q1":"000004","Q2":"000001","Q3":"GESTOUR - CALL CENTER","ALT_CODE":0}
JSON_AGE_LISTS: {"MINICR":"MINICR","ST01AS":"ST01AS","ST01BS":"ST01BS","ST02AS":"ST02AS","ST02BS":"ST02BS","ST04BS":"ST04BS","ST05BS":"ST05BS","ST11AS":"ST11AS","ST11BS":"ST11BS","STAS":"STAS"}
B2C_ALT_CODE: 0
LOCK: 

标签: pythonajaxweb-scrapingbeautifulsoup

解决方案


requests库有一个post()函数,可以让您将其data作为 Python 字典传递。这可以按如下方式完成:

from bs4 import BeautifulSoup
import requests

data = {
    "GOTOSTEP" : 2,
    "LANG" : "it",
    "flag_ar" : "",
    "trta" : "ISCPOZ",
    "datea": "12/02/2019",
    "res" : "",
    "paxan" : 1,
    "paxbn" : 0,
    "paxin" : 0,
    "ad" : 0,
    "veicolo" : "",
    "rimorchio" : "",
    "exl" : "",
    "exa" : "",
    "bic" : 0,
    "bag1" : 0,
    "bag2" : 0,
    "bag3" : 0,
    "dnr" : 0,
    "trtr" : "",
    "dater" : "",
    "rres" : "",
    "rpaxan" :  "",
    "pol_insurance" : "",
    "Q1" : "000004",
    "Q2" : "000001",
    "Q3" : "GESTOUR - CALL CENTER",
    "Q9" : "0",
    "JSON_AGE_DATA" : '{"STATUS":"OK","STATUS_MSG":"","Q1":"000004","Q2":"000001","Q3":"GESTOUR - CALL CENTER","ALT_CODE":0}',
    "JSON_AGE_LISTS" : '{"MINICR":"MINICR","ST01AS":"ST01AS","ST01BS":"ST01BS","ST02AS":"ST02AS","ST02BS":"ST02BS","ST04BS":"ST04BS","ST05BS":"ST05BS","ST11AS":"ST11AS","ST11BS":"ST11BS","STAS":"STAS"}',
    "B2C_ALT_CODE" : 0,
    "LOCK" : "",
}

r = requests.post("http://gestour.nefesy.com/b2c/b2c_maker.php", data=data)
soup = BeautifulSoup(r.content, "html.parser")

for ul in soup.find_all('ul'):
    print([li.text for li in ul.find_all('li')])

然后可以使用BeautifulSoup. 在这种情况下,它以列表的形式返回一个数据<ul><li>表,为您提供:

['', '12/02/2019', '16:05', '1:00', 'DON PEPPINO\xa0', 'BASSISSIMA STAGIONE Ordinario', '13,70 €']
['', '12/02/2019', '19:10', '1:00', 'DON PEPPINO\xa0', 'BASSISSIMA STAGIONE Ordinario', '13,70 €']

推荐阅读