Python爬虫之两种urlencode编码发起post请求方式

背景

闲来无事想爬一下牛客网的校招薪资水平及城市分布,最后想做一个薪资水平分布的图表出来

于是发现牛客使用的是application/x-www-form-urlencoded的格式

测试

首先可以先用apipost等测试工具先测试一下是否需要cookie之类的,发现是不需要的,通过urlencode编码的方式也能够请求到数据

于是开始写代码

coding

这里给出两种方式:

首先使用错误的编码格式肯定是拿不到数据的

①通过urllib
python 复制代码
import requests
import time
import json
from urllib.parse import urlencode
import urllib.request

timestamp = time.time()
timestamp_milliseconds = int(timestamp*1000)
newcode_job_url = f"https://www.nowcoder.com/np-api/u/job/square-search?_={timestamp_milliseconds}"

form_data = {
    "careerJobId": "",
    "jobCity": "",
    "page": 1,
    "query": "开发",
    "random": "true",
    "recommend": "false",
    "recruitType": 1,
    "salaryType": 2,
    "pageSize": 20,
    "requestFrom": 1,
    "order": 0,
    "pageSource": 5001,
    "visitorId": "4cd1adf2-a80d-49e5-82a5-5fcc17227813"
}

form_data["jobCity"] = "北京"
# 需要手动编码
form_data = urlencode(form_data).encode()
request = urllib.request.Request(newcode_job_url)
response = urllib.request.urlopen(request,form_data)
print(response.read().decode())
②通过requests(建议)

通过requests简直不要太方便,因为requests会自动使用合适的编码格式进行编码

python 复制代码
import requests
import time
import json
from urllib.parse import urlencode
import urllib.request

timestamp = time.time()
timestamp_milliseconds = int(timestamp*1000)
newcode_job_url = f"https://www.nowcoder.com/np-api/u/job/square-search?_={timestamp_milliseconds}"

form_data = {
    "careerJobId": "",
    "jobCity": "",
    "page": 1,
    "query": "开发",
    "random": "true",
    "recommend": "false",
    "recruitType": 1,
    "salaryType": 2,
    "pageSize": 20,
    "requestFrom": 1,
    "order": 0,
    "pageSource": 5001,
    "visitorId": "4cd1adf2-a80d-49e5-82a5-5fcc17227813"
}

form_data["jobCity"] = "北京"
response = requests.post(newcode_job_url, data=form_data)
print(response.text)

结果

相关推荐
lichong95133 分钟前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++
Tiny番茄34 分钟前
31.下一个排列
数据结构·python·算法·leetcode
小白学大数据2 小时前
实战:Python爬虫如何模拟登录与维持会话状态
开发语言·爬虫·python
FriendshipT2 小时前
目标检测:使用自己的数据集微调DEIMv2进行物体检测
人工智能·pytorch·python·目标检测·计算机视觉
平谷一勺2 小时前
数据清洗-缺失值的处理
python·数据分析
末世灯光2 小时前
时间序列入门第一问:它和普通数据有什么不一样?(附 3 类典型案例)
人工智能·python·机器学习·时序数据
开心-开心急了2 小时前
Flask入门教程——李辉 第一、二章关键知识梳理(更新一次)
后端·python·flask
锦***林2 小时前
用 Python 写一个自动化办公小助手
开发语言·python·自动化
www.022 小时前
微信克隆人,聊天记录训练专属AI(2.WeClone训练模型)
人工智能·python·微信·聊天克隆人·微信克隆人
Gitpchy4 小时前
Day 20 奇异值SVD分解
python·机器学习