python-scrapy使用Post请求获取信息

发布时间 2023-03-29 15:05:33作者: P1nk64

先给出需要的body和url

url = 'https://job.10086.cn/job-app/job/searchJobs.do'
body = {
            "serviceName": "searchJobs",
            "header": {
                "version": "1.0",
                "timestamp": 1680059209452,
                "digest": "ODI2ZTk0YmJjNWE2OGNmODVlNzNiMGNiNmFmYTU3OTg=;DV/f5N2rpTLfzC+IzBiyzjhqEBK6JvSfAY1/qnkczL88bwgPw/2KDDD2+oPOog/Qb4uqTwE/d2xUYUhYqbCYQJXyr01GGrm80OhPlKQtLuBttZfMZd1/3Wlkwc9aId87da4s2jl8rbn9FSSaH8jCAivqRXGzmRnPc+5BFoYYsvWzoIF3z1iWcasrqwmzhrd7gIS7ihWvqL7YIfeSx1EAEqf71qgvlRgOV9YD4+T9iJxXk1fz8ASP9TMkd0AbhNQbknXgBqPlC+tnxdLqSiM4vB620JAZih9FuUcPZOApXfAvOB5mG9eOt5xk434lEEd3ZtkzeuZ653vu57KWogX4Fw==",
                "conversationId": "20230329110649452614678"
            },
            "data": {
                "pageNo": "2",
                "pageSize": 20,
                "companyId": 23,
                "type": 1,
                "category": "",
                "workYear": "",
                "degree": "",
                "workType": ""
            }
        }

第一种方式,使用requests库

import requests

r = requests.post(url,json=body)
print(r.text)

得到结果

点击查看代码/删减了部分信息
"{\"code\":\"0000\",\"data\":{\"total\":121,\"jobList\":[{\"higestSalary\":null,\"subCategory\":\"304\",\"address\":\"\",\"city\":\"衢州市",\"degree\":\"25\",\"description\":\"1、负责落实行业营销计划,开展行业集团客户营销活动;收集行业发展信息和客户行业信息化需求;\\n2、分析研究行业特征,提出行业解决方案的优化建议;掌握标准化产品的产品性能和技术特点,为客户提供标准化产品的咨询服务;\\n3、针对不同类型集团客户,协助设计符合行业特点的个性化解决方案,并组织实施;开展集团客户业务咨询、业务办理、投诉处理等工作,协调相关资源满足客户需求;\\n4、负责所辖集团的客户关系维系,及时发现客户异动,做好异动分析和挽留工作。\",\"type\":\"1\",\"companyShortName\":\"浙江公司\",\"isEmergency\":false,\"provin}"

这种方式没有使用scrapy,与scrapy分离开,需要手动设置sleep时间,但是作者对于headers的处理很巧妙,是自动处理的,所以不需要手动设置。这种方式适合scrapy获取不到信息的时候,测试自己的body信息是否有误

第二种方式,使用scrapy

yield JsonRequest(
            url=url,
            data=body,
            callback=self.parse,
        )
def parse(self, response, **kwargs):
    result = json.loads(response.text)
    print(result)

注意在使用这种方式时,记得把selenium中间件关掉,否则一直收到<html>