【Python爬虫三天从0到1】Day1:爬虫核心
目录
1.HTTP协议与WEB开发
(1)简介
(2)请求协议和响应协议
2. requests&反爬破解
(1)UA反爬
(2)referer反爬
3.请求参数
(1)get请求以及查询参数
(2)post请求以及请求体参数
4.爬虫图片和视频
(1)直接爬取媒体数据流
5.打码平台
获取验证码
打码平台:图鉴
1.模拟登陆(破解验证码)
2.抖音下载一个视频

1.HTTP协议与WEB开发
我们要知其然并知其所以然,在讲爬虫之前先把他的 “根” 说清楚
互联网是什么?
简单地说:互联网本身就是一种信息的分享和传递,我们上网的过程本质上就是一种下载资源的过程。
(1)简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网
(WWW:World Wide Web)服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
(2)请求协议和响应协议
http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字文本。

一个完整的URL包括:协议、ip、端口、路径、参数
URL: https://www.baidu.com/s?wd=yuan 协议://域名(IP)/路径?查询参数(a=1&b=2&c=3)请求方式:get与post请求
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的请求体中
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制
响应状态码:状态码 是当客户端向服务器端发送请求时, 返回的请求结果。借助状态码,用户可以知道服务器端是正常 理了请求,还是出 现了 。状态码如200 OK,以3位数字和原因组成。
请求头:
-
Accept:能够接收的数据格式
- Accept-Encoding:能够接收的压缩方式
-
User-Agent:客户端代理
-
Content-Type:指定发送的请求体数据的编码类型和格式。
2. requests&反爬破解
(1)UA反爬
import requestsurl = 'https://www.baidu.com/'
my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}resp = requests.get(url, headers=my_headers)
# print(resp.status_code) # 响应状态码
# print(resp.headers) # 响应头
# print(resp.text) # 响应返回的内容# 文档下载
with open('baidu.html', 'w', encoding='utf-8') as f:f.write(resp.text)
(2)referer反爬
两种请求:
- text(html)
- AJAX/json(html、css、js)

import requestsurl = 'https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=20&selected_categories=%7B%7D&uncollect=false&tags='
my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36','Referer': 'https://movie.douban.com/explore'
}resp = requests.get(url, headers=my_headers)
# print(resp.json())with open('douban.json','w') as f:f.write(resp.text)
(3)cookie反爬
import requestsurl = 'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?type=sha&order_by=percent&order=desc&size=10&page=1'
cookie='xq_a_token=e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557; xqat=e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557; xq_r_token=2a5b753b2db675b4ac36c938d20120660651116d; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwMDY5OTg3NSwiY3RtIjoxNjk4MjM4NzE0MTc3LCJjaWQiOiJkOWQwbjRBWnVwIn0.aqSRg4NSgDo_B0rpAi6IqTX6bgyfKElHCAOhVKAovoNkn7v2os2QhkK1A-1nw5GmGxPFIRIN63rdl_ucw7SFDtAKfXHq24XpmicjGTz-UA4Z0ec70opumo4apOqENC84064mCh21ODMI5stVImrWjWdMrsylJjAe8DpB0SiNbbYZeUdSHXY1XyyqR-WCVh58etJhusilb4HYS-ruAUVXspgzW8XF8Nehnplgrk0eVx1KK_Le6EYqKkqw0mGOlHd1T1Ft7bpjMn8VFwJ5LriDC9IGw-PFT6aTIHnR6Aw3-fAyGj0SK35zJcaxjYw9yNhJFGQvCow-zsyDxKcbvZisXQ; cookiesu=491698238770530; u=491698238770530; device_id=f19daf13250cbd45bc5ea0d7b699854b; Hm_lvt_1db88642e346389874251b5a1eded6e3=1698238794; s=aq11dck1v6; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1698239089'my_headers = {'User-Agent': 'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?type=sha&order_by=percent&order=desc&size=10&page=1','Referer': 'https://xueqiu.com/hq','Cookie': cookie}
resp=requests.get(url,headers=my_headers)print(resp.text)
3.请求参数
(1)get请求以及查询参数
import requestsurl = 'https://m.douban.com/rexxar/api/v2/movie/recommend'my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36','Referer': 'https://movie.douban.com/explore'
}my_params = {'start': 0,'count': 60,'tags': '爱情'
}resp = requests.get(url, headers=my_headers, params=my_params)
# print(resp.json())with open('douban1.json','w') as f:f.write(resp.text)
(2)post请求以及请求体参数

import requestsurl='https://aidemo.youdao.com/trans'my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36','Referer': 'https://ai.youdao.com/'
}while 1:wd = input('请输入翻译的内容>>>')my_data={'q': wd,'from': 'Auto','to': 'Auto'}resp = requests.post(url,headers=my_headers,data=my_data)print(resp.json().get('translation')[0])
4.爬虫图片和视频
(1)直接爬取媒体数据流

import requestsresp=requests.get('https://pic.netbian.com/uploads/allimg/231012/200615-1697112375eae9.jpg')print(resp.content) # 响应字节串
# print(resp.text) # 响应字符串# 写文件
with open('meinv.png','wb') as f:f.write(resp.content)
5.打码平台
获取验证码
先清空一下数据包

点击刷新验证码,找到携带验证码图片的数据包(可以预览一下)

试一下请求网址能否搜索到验证码,并刷新页面,看一下是否每次刷新验证码都会随之改变

编写爬虫代码,下载验证码
import requestsurl = 'https://so.gushiwen.cn/RandCode.ashx?t=1698274193608?t=1698274440797?t=1698274448532'resp = requests.get(url)with open('code.png', 'wb') as f:f.write(resp.content)
看一下是否成功下载,并重新执行代码,看一下验证码是否刷新

打码平台:图鉴
点击开发文档

选择Python

分析一下脚本内容
import base64
import json
import requests
# 一、图片文字类型(默认 3 数英混合):
# 1 : 纯数字
# 1001:纯数字2
# 2 : 纯英文
# 1002:纯英文2
# 3 : 数英混合
# 1003:数英混合2
# 4 : 闪动GIF
# 7 : 无感学习(独家)
# 11 : 计算题
# 1005: 快速计算题
# 16 : 汉字
# 32 : 通用文字识别(证件、单据)
# 66: 问答题
# 49 :recaptcha图片识别
# 二、图片旋转角度类型:
# 29 : 旋转类型
#
# 三、图片坐标点选类型:
# 19 : 1个坐标
# 20 : 3个坐标
# 21 : 3 ~ 5个坐标
# 22 : 5 ~ 8个坐标
# 27 : 1 ~ 4个坐标
# 48 : 轨迹类型
#
# 四、缺口识别
# 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
# 33 : 单缺口识别(返回X轴坐标 只需要1张图)
# 五、拼图识别
# 53:拼图识别
def base64_api(uname, pwd, img, typeid):with open(img, 'rb') as f:base64_data = base64.b64encode(f.read())b64 = base64_data.decode()data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:#!!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别return result["message"]return ""if __name__ == "__main__":img_path = "C:/Users/Administrator/Desktop/file.jpg"result = base64_api(uname='你的账号', pwd='你的密码', img=img_path, typeid=3)print(result)
修改脚本参数

运行程序,对比运行结果和图片验证码是否一样

6.今日作业
1.模拟登陆(破解验证码)
要求:
- 目标网站:古诗文网
2.抖音下载一个视频
要求:
- 目标网站:抖音
- 用户:刘浩存
先清空一下数据包

慢慢滑动下拉框,找到此种数据包

也可以筛选一下

找到图片的绝对网址

试一下能否播放

编写爬虫代码,下载视频
import requestsresp=requests.get('http://v26-web.douyinvod.com/5e92b6ed6a4633b2470c7ccb7944af80/653941a0/video/tos/cn/tos-cn-ve-15-alinc2/03b58eaab171471c9751fef4792da4d2/?a=6383\u0026ch=10010\u0026cr=3\u0026dr=0\u0026lr=all\u0026cd=0%7C0%7C0%7C3\u0026cv=1\u0026br=936\u0026bt=936\u0026cs=0\u0026ds=4\u0026ft=bvTKJbQQqUisf_0ZPo0OW_EklpPiXXb0rFVJEFNiYRCPD-I\u0026mime_type=video_mp4\u0026qs=0\u0026rc=ZDRmZzU7Njo2NDplZmdpO0BpM3dnNmd0NWRneTMzNGkzM0BiYjI1XmM0NmMxYzRiLzEwYSM0ajRhMC5ncjZfLS1jLTBzcw%3D%3D\u0026btag=e00010000\u0026dy_q=1698247554\u0026l=20231025232554EFBDF4DD234ADE2761D5')with open('liuhaocun.mp4','wb') as f:f.write(resp.content)
检查是否下载成功

liuhaocun.mp4
本文所涉及的他人内容包括但不限于文字、图片、音频、视频等,来源于各个渠道和资源,并非本文作者原创。在使用他人内容时,本文作者已经尽力确保遵循适用的版权法律和相关规定,并尽力寻找和确认素材的合法来源。在此声明中的他人内容的使用,仅出于分享和传播信息的目的,并不代表本文作者对其内容的观点或立场进行支持或认可。本文作者对他人内容的准确性、完整性或时效性不承担责任,并且不保证这些素材没有侵犯任何第三方的知识产权。
素材来源:
- 路飞学城
- 等
相关文章:
【Python爬虫三天从0到1】Day1:爬虫核心
目录 1.HTTP协议与WEB开发 (1)简介 (2)请求协议和响应协议 2. requests&反爬破解 (1)UA反爬 (2)referer反爬 (3)cookie反爬 3.请求参数 &#x…...
2023-10 最新jsonwebtoken-jjwt 0.12.3 基本使用
导入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.12.3</version></dependency>包括了下面三个依赖, 所以导入上面一个就OK了 <dependency><groupId>io.jsonwe…...
云起无垠典型案例入选《2023软件供应链安全洞察》报告
近日,历时6个月,由ISC编制的《2023软件供应链安全洞察》报告(以下简称《报告》)正式对外发布。《报告》围绕软件供应链安全现状、技术内核、治理指南、落地实践展开,以期为行业从业者提供有价值的信息和洞见࿰…...
怎么从休学证明中取出休学原因(python自动化办公,涉及word和excel)
怎么从休学证明中取出休学原因(python自动化办公,涉及word和excel) 本代码偏向处理高校教务处的工作 休学或请假模板如下: 休学证明(此联存教务办)编号:休202323 计算机系23级计算机科学与技术…...
C语言 定义一个函数,并调用,该函数中打印显示直角三角形
#include<stdio.h> void chengfabiao() {for (int i 1; i < 5; i){for (int j 1; j < i; j){printf("*");} printf("\n");} } int main(int argc,const char *argv[]) {chengfabiao();return 0; }...
Doceker-compose——容器群集编排管理工具
目录 Docker-compose 1、Docker-compose 的三大概念 2、YAML文件格式及编写注意事项 1)使用 YAML 时需要注意下面事项 2)ymal文件格式 3)json格式 3、Docker Compose配置常用字段 4、Docker-compose的四种重启策略 5、Docker Compos…...
Redis 与 MySQL 一致性 实现方案
正常情况下的流程是:请求来了,先检查 Redis 有没有数据,有返回;没有便查询 MySQL 然后 放入 Redis。 此时,如果 MySQL 的数据发生了变化,所以需要同步到 Redis 中。 解决方法:MySQL 中的数据更新…...
运维 | 使用 Docker 安装 Jenkins | Jenkins
运维 | 使用 Docker 安装 Jenkins | Jenkins 前言 本期内容主要是为了学习如何通过 Docker 安装Jenkins,仅作为记录与参考,希望对大家有所帮助。 准备工作 系统:CentOS 7.9配置:4c8g 快速安装 下面以 Docker 方式安装 Jenkin…...
linux-磁盘应用
目录 一、磁盘内容简述 1、一些基本概念 2、分区简述 3、常见文件系统 4、linux硬盘文件 二、对linux系统进行分区 1、用fdisk进行分区 2、用parted进行分区 一、磁盘内容简述 1、一些基本概念 - 扇区大小:512Btyes,0.5KB - 磁盘最小存储单位&…...
java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城免费搭建
涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …...
软考高级之系统架构师之软件工程
软件工程 面向对象设计原则 单一职责:设计目的单一的类开闭原则;对扩展开放,对修改关闭里氏替换:子类可以替代父类依赖倒置:要依赖于抽象,而不是实现。要针对接口编程,不要针对实现编程接口隔…...
SpringBoot集成与应用Neo4j
文章目录 前言集成使用定义实体配置定义Repository查询方法方式一:Query方式二:Cypher语法构建器方式三:Example条件构建器方式四:DSL语法 自定义方法自定义接口继承自定义接口实现自定义接口neo4jTemplateNeo4jClient 自定义抽象…...
做人,不一定要风风光光,但一定要堂堂正正。处事,不一定要尽善尽美,但一定要问心无愧。
做人,不一定要风风光光,但一定要堂堂正正。处事,不一定要尽善尽美,但一定要问心无愧。以真诚的心,对待身边的每一个人。以感恩的心,感谢拥有的一切。 未来,不是穷人的天下,也不是富人…...
51单片机实验:数码管动态显示00-99
1、实验要求 利用STC89C52RC单片机开发板实现:使用2位数码管循环显示00-99,每次间隔1s,并且当计数到20时,则蜂鸣器鸣响1次。 2、实验分析 程序实现分析: 1、定义数码管位选引脚(P2.4、P2.5、P2.6、…...
【教3妹学编程-java实战5】结构体字段赋值的几种方式
插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 2哥 :3妹,考考你,你知道java结…...
阿里蚂蚁淘宝等多次一面面试面经
一面采用电话面试笔试链接做算法题(可能开视频)的形式 蚂蚁第一次: 自我介绍 技术一般使用开源技术还是自己研发 开源spring cloud等 流水线用来做什么 用户是什么人 应用场景 是toB的对吧 学到的最前沿的技术有哪些 gateway全局权限…...
UE4 中可全局获取的变量(例如游戏实例、玩家控制器等) 详解
目录 0 引言1 全局对象(全局变量)1.1 游戏实例 GameInstance1.1.1 介绍1.1.2 使用 GameInstance 1.2 玩家控制器 PlayerController1.3 游戏世界类 UWorld 🙋♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏&…...
c#使用ExifLib库提取图像的相机型号、光圈、快门、iso、曝光时间、焦距信息等EXIF信息
近期公司组织了书画摄影比赛,本人作为摄影爱好者,平时也会拍些照片,这次比赛当然不能错过。为了提高获奖概率,选了19张图像作为参赛作品。但是,摄影作品要提交图像的光圈、曝光时间等参数。一两张还可以通过电脑自带软…...
C++入门05—指针
1. 指针的基本概念 指针的作用: 可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 可以利用指针变量保存地址 2. 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名; 示例: …...
Go学习第十六章——Gin文件上传与下载
Go web框架——Gin文件上传与下载 1. 文件上传1.1 入门案例(单文件)1.2 服务端保存文件的几种方式SaveUploadedFileCreateCopy 1.3 读取上传的文件1.4 多文件上传 2. 文件下载2.1 快速入门2.2 前后端模式下的文件下载2.3 中文乱码问题 1. 文件上传 1.1 …...
学Simulink——基于Simulink的基于扰动观测器(DOB)的负载扰动补偿
目录 手把手教你学Simulink——基于Simulink的基于扰动观测器(DOB)的负载扰动补偿 摘要 一、背景与挑战 1.1 负载扰动补偿的痛点与传统控制局限 1.1.1 应用场景与核心指标 1.1.2 传统PI控制的缺陷 1.2 DOB负载扰动补偿的核心优势 1.3 设计目标 二、系…...
快速验证c盘清理方案,用快马平台十分钟搭建原型工具
最近电脑C盘总是爆满,系统频繁弹窗提示空间不足,严重影响工作效率。作为一个非专业开发者,我尝试用InsCode(快马)平台快速搭建了一个C盘清理工具原型,整个过程比想象中简单许多。这里分享我的实现思路和具体操作步骤,或…...
GanttProject:免费开源甘特图工具如何重塑项目管理流程
GanttProject:免费开源甘特图工具如何重塑项目管理流程 【免费下载链接】ganttproject Official GanttProject repository 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 在项目管理工具层出不穷的今天,GanttProject以其完全免费开源…...
Phi-4-mini-reasoning企业应用:替代传统规则引擎做逻辑校验服务
Phi-4-mini-reasoning企业应用:替代传统规则引擎做逻辑校验服务 1. 为什么企业需要逻辑校验服务 在现代企业系统中,逻辑校验无处不在。从电商平台的优惠券规则验证,到金融系统的风控审核,再到制造业的工艺流程检查,都…...
BetterNCM Installer:让网易云音乐插件安装化繁为简的利器
BetterNCM Installer:让网易云音乐插件安装化繁为简的利器 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾因复杂的插件安装流程望而却步?是否在面对命…...
C++高性能网络库ZLToolKit资源池源码解析:如何用智能指针实现对象复用与自动回收
C高性能网络库ZLToolKit资源池源码解析:智能指针实现对象复用与自动回收 在C高性能服务器开发中,频繁的对象创建与销毁往往是性能瓶颈之一。想象一下这样的场景:一个直播服务器每秒需要处理数万条消息,每条消息都需要临时创建对象…...
用STM32F4做个PWM信号发生器:按键调参+OLED显示,示波器实测验证
用STM32F4打造高精度PWM信号发生器:从原理到实战 在电子开发与测试中,PWM信号发生器是不可或缺的工具。专业信号源价格昂贵,而基于STM32F4的开发板却能以极低成本实现类似功能。本文将带你从零构建一个带OLED显示和按键控制的PWM信号发生器&…...
QML与QWidget混合开发:实现高效UI集成的实战指南
1. 为什么需要QML与QWidget混合开发 在Qt开发中,QML和QWidget是两种完全不同的UI构建方式。QML凭借其声明式语法和强大的动画效果,在现代UI开发中越来越受欢迎。但现实情况是,很多成熟的功能模块都是基于QWidget开发的,比如一些第…...
颠覆式数据处理解决方案:CyberChef实现复杂数据转换的全流程优化
颠覆式数据处理解决方案:CyberChef实现复杂数据转换的全流程优化 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef …...
基于CubeMX与HAL库:STM32F302串口重定向Printf的工程化实践
1. 为什么需要串口重定向Printf 在嵌入式开发中,调试信息输出是排查问题的生命线。想象一下你正在调试一个复杂的传感器数据采集系统,突然发现数据异常,这时候如果能像在PC上编程一样直接printf("当前温度值:%f", temp…...


