当前位置: 首页 > news >正文

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

背景

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

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

测试

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

于是开始写代码

coding

这里给出两种方式:

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

①通过urllib
import requests
import time
import json
from urllib.parse import urlencode
import urllib.requesttimestamp = 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会自动使用合适的编码格式进行编码

import requests
import time
import json
from urllib.parse import urlencode
import urllib.requesttimestamp = 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)

结果

相关文章:

  • Qt-QTransform介绍与使用
  • 机器学习算法---回归
  • Linux Java Jar Shell 脚本
  • 使用 React 实现自定义数据展示日历组件
  • 《Linux C编程实战》笔记:进程操作之退出,执行,等待
  • SQL进阶理论篇(十二):InnoDB中的MVCC是如何实现的?
  • 基于点云去滤除灰尘的滤波算法调研
  • nlp与cv的发展
  • OpenCV技术应用(7)— 将图像转为热力图
  • 用23种设计模式打造一个cocos creator的游戏框架----(二十)解析器模式
  • 【LeetCode刷题笔记】155.最小栈
  • 减速机振动相关标准 - 笔记
  • 鸿蒙HarmonyOS开发用什么语言
  • Python之PyCharm开发工具的安装与设置
  • for命令语句
  • ES6指北【2】—— 箭头函数
  • Asm.js的简单介绍
  • echarts的各种常用效果展示
  • Iterator 和 for...of 循环
  • Javascript设计模式学习之Observer(观察者)模式
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Magento 1.x 中文订单打印乱码
  • October CMS - 快速入门 9 Images And Galleries
  • oschina
  • python3 使用 asyncio 代替线程
  • Redash本地开发环境搭建
  • Spring核心 Bean的高级装配
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 开源SQL-on-Hadoop系统一览
  • 入口文件开始,分析Vue源码实现
  • raise 与 raise ... from 的区别
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (四)汇编语言——简单程序
  • (转)Scala的“=”符号简介
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ..回顾17,展望18
  • .equals()到底是什么意思?
  • .Net面试题4
  • .Net中wcf服务生成及调用
  • @RequestMapping-占位符映射
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [Angular] 笔记 6:ngStyle
  • [APUE]进程关系(下)
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [cocos2d-x]关于CC_CALLBACK
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [CTF]php is_numeric绕过
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件