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)

结果

相关推荐
郭老二3 小时前
【Python】基本语法:装饰器语法糖@
python
_Jimmy_5 小时前
Agent常用检索器的详细介绍
python·langchain
小柯南敲键盘5 小时前
图片翻译API接入与自动化实现指南
运维·python·自动化
旅僧5 小时前
Q-learning(自用)
python·机器学习
Python大数据分析@6 小时前
曝梁文锋称「一度不想维护C端用户,奈何赶不走」,DeepSeek真不需要C端用户吗?可能会有啥影响吗?
python
艾斯特_7 小时前
工作流与多Agent协作:LangGraph、MCP和A2A的应用分层
人工智能·python·ai
IT小盘7 小时前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
我叫黑大帅7 小时前
add()和 __add__() 写法哪个更好呢?
后端·python·面试
不如语冰7 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
柠檬味的Cat7 小时前
GEO优化系统哪个渠道商好
大数据·人工智能·python