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.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会自动使用合适的编码格式进行编码

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)

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内网渗透测试基础——内网信息收集

内网渗透测试基础——内网信息收集 在内网渗透测试环境中,有很多设备和防护软件,例如Bit9、ArcSight、Maniant等。它们通过收集目标内网的信息,洞察内网网络拓扑结构,找出内网中最薄弱的环节。信息收集的深度,直接关系…

即兴小索奇-MyBatis全套笔记

一、MyBatis 1、MyBatis简介 1.1、MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis(3之前还是iBatis&…

Docker 核心技术

Docker 定义:于 Linux 内核的 Cgroup,Namespace,以及 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器Docke…

MicroBin让代码共享更简单

什么是 MicroBin ? MicroBin 是一个超小型,功能丰富、可配置、安全、独立且自托管的Pastebin Web 应用程序。但更简单,可通过调整环境变量来添加或删除功能,具有 URL 重定向、自动文件过期、原始文件服务、5 级隐私设置、二维码共…

工业一体化污水处理设备有哪些

工业一体化污水处理设备是目前污水处理领域中的重要技术手段之一,对于各行各业的生产过程中产生的污水进行高效、环保的处理至关重要。如今,工业一体化污水处理设备已经得到广泛应用,并得到了许多企业和环保机构的认可。在本文中,…

手把手带你死磕ORBSLAM3源代码(一)目录详解

目录 一.引言 二.关键目录 2.1Examples目录 2.2 Include目录 2.3 src目录 一.引言 ORB-SLAM3是一种基于特征点的稀疏实时单目SLAM(Simultaneous Localization and Mapping)系统。它是ORB-SLAM系列模型的第三代版本,用于在无人机、机器人…

多目标跟踪学习

本文来源: 目标跟踪那些事儿-技术和课程介绍_哔哩哔哩_bilibili 为该视频的学习笔记 目的:我的学习目的主要是了解现有的跟踪算法,并着重了解卡尔曼滤波算法,利用卡尔曼滤波算法进行多目标跟踪等后续一系列估计算法。老师视频中提…

从零开始学小波变换

小波变换 哈尔变换 对于哈尔变换可以用如下矩阵表示: T H F H T THFH^T THFHT 其中, F F F为一个 N N N\times N NN大小的图像矩阵, H H H为一个 N N N\times N NN大小的哈尔变换矩阵, T T T一个 N N N\times N NN大小的图像变换的结果…

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现KOA-CNN-B…

el-select multiple表单校验问题

记录一个el-select复选框表单校验例子 1、一打开页面就会触发校验 解决方案:设置初始值为空数组 2、选中下拉数据,不会再次触发校验,导致提示文字一直存在 解决这个问题,首先先看看v-model 、prop属性、rules校验是否正确&#…

【位运算】136.只出现1次的数字

题目 进阶题目:剑指:找出数组中2个只出现1次的数字 剑指:数组中数字出现的次数 异或基本性质: 法1:异或位运算 class Solution {public int singleNumber(int[] nums) {int res 0;for (int i : nums) {res ^ i;}re…

机器学习---bagging与随机森林

1. bagging算法 集成学习有两个流派:一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是 bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。 Bagging的弱学习器之间的确没有boosting那样的联…

操作系统之银行家算法

Dijkstra在1965年提出的银行家算法是著名的死锁避免算法,这个用于一个银行家给多个顾客贷款的算法可以直接用于操作系统给进程分配资源,这时只要把银行家换成操作系统,把顾客换成进程,把资金换成资源,把银行家决定是否…

redis基本用法学习(字符串类型基本操作)

字符串类型是redis支持的最简单的数据类型,同时最简单的键值对类型也是key和value都是单个字符串,本质上就是字符串之间的相互映射,redis官网String类型简介页面提到可以用于缓存HTML片段或页面内容。   redis支持设置/获取单个键值对&…

Python | Flask测试:发送post请求的接口测试

HTTP/1.1 协议规定的 HTTP 请求方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 几种。POST通常用来向服务端提交数据,主要用于提交表单、上传文件。 HTTP 协议是以ASCII码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为…

用GMAT进行卫星轨道仿真

文章目录 设计飞行器预报模型配置轨道图配置预报命令运行和分析 GMAT是一跨开源轨道设计软件,官网挂着NASA的名字,看上去十分给力。 下载之后直接解压,可执行文件在bin目录下,双击GMAT.exe,就可以进入其欢迎界面了。G…

新版Android Studio Logcat 筛选日志

下载了新版的Android Studio,android-studio-2022.3.1.21-mac_arm,记录一下新版本AS的logcat过滤日志条件 1. 按照包名过滤 1.1 过滤当前包名的日志 package:mine 1.2 过滤其他包名日志 package:com.example.firstemptyapplication 2. 按照日志等级过滤…

Qt之使用QListView加载相册(富文本ToolTip)

一.效果 二.实现 #include "mainwindow.h" #include "ui_mainwindow.h"#include <QStandardItemModel> #include <QFont>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QFont…

使用Httpclient来替代客户端的jsonp跨域解决方案

最近接手一个项目&#xff0c;新项目需要调用老项目的接口&#xff0c;但是老项目和新项目不再同一个域名下&#xff0c;所以必须进行跨域调用了&#xff0c;但是老项目又不能进行任何修改&#xff0c;所以jsonp也无法解决了&#xff0c;于是想到了使用了Httpclient来进行服务端…

Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!

Gemini 1.0&#xff1a;Google推出的全新AI模型&#xff0c;将改变生成式人工智能领域的游戏规则&#xff01; &#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 …