python在post请求下爬取数据,返回的值为什么为空?

python在post请求下爬取数据,返回的值为什么为空?

问题描述:

本人小白,尝试爬杭州市二手房挂牌信息,
网址:http://jjhygl.hzfc.gov.cn/webty/gpfy/gpfySelectlist.jsp,
代码如下

import requests
url = 'http://jjhygl.hzfc.gov.cn/webty/WebFyAction_getGpxxSelectList.jspx'
data = {'page': 1}
headers = {'Host': 'jjhygl.hzfc.gov.cn',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0',
            'Accept': 'text/html, */*; q=0.01',
            'Accept-Language': 'en-US,en;q=0.5',
            'Accept-Encoding': 'gzip, deflate',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'X-Requested-With': 'XMLHttpRequest',
            'Content-Length': '311',
            'Connection': 'keep-alive',
            'Referer': 'http://jjhygl.hzfc.gov.cn/webty/gpfy/gpfySelectlist.jsp',
            'Cookie': 'ROUTEID=.lb6; JSESSIONID=2E78A1FE8DBC80F1CEEE20264BE96B1F.lb6; Hm_lvt_70e93e4ca4be30a221d21f76bb9dbdfa=1559115557; Hm_lpvt_70e93e4ca4be30a221d21f76bb9dbdfa=1559115557',
            'Pragma': 'no-cache',
            'Cache-Control': 'no-cache'}
r = requests.post(url, data =data, headers = headers)
r.content
r.text

返回结果是

b'{"list":[],"pageinfo":"\xe6\x9a\x82\xe6\x97\xa0\xe6\x95\xb0\xe6\x8d\xae"}'
'{"list":[],"pageinfo":"暂无数据"}'

图片说明
请问怎么才能得到图中的信息?

是因为你给的数据不足够,我刚才打开你的网站试了一下。

header中必须有以下数据

图片说明

body中必须与以下数据

图片说明

结果如你所愿

图片说明
综合来看,你还是对于网站的分析不太够,header中的cookie以及body中的那几个参数应该是请求[http://jjhygl.hzfc.gov.cn/webty/gpfy/gpfySelectlist.jsp]的时候获得。所以需要先请求拿过来参数,第二步再请求这个地址。

确认下POST过去的数据对不对,先用模拟器测试下 data = {'page': 1}

你直接把url当做网址点进去看看就知道为什么了

这么多data信息 你就传个page?

gply=1&wtcsjg=&jzmj=&ordertype=&fwyt=&hxs=&havepic=&xzqh=&secondxzqh=&starttime=&endtime=&keywords=&page=1&xqid=0&signid=ff80808166484c980166486b4e0b0023&threshold=ff80808166484c980166486b4e0b0021&salt=ff80808166484c980166486b4e0b0022&nonce=0&hash=0448c9b2298cc81d7e0b7a2ab77fcd9261f956537b0939664985b08a1bc4ce20

应该是你headers问题,返回数据个好像事json格式的,你尝试将 "Content-Type": "application/json" ; charset=UTF-8', 试下

确认下POST过去的数据对不对,先用模拟器测试下 data = {'page': 1}