【Python爬虫三天从0到1】Day1:爬虫核心

目录

1.HTTP协议与WEB开发

(1)简介

(2)请求协议和响应协议

2. requests&反爬破解

(1)UA反爬

(2)referer反爬

(3)cookie反爬

3.请求参数

(1)get请求以及查询参数

(2)post请求以及请求体参数

4.爬虫图片和视频

(1)直接爬取媒体数据流

5.打码平台

获取验证码

打码平台:图鉴

1.模拟登陆(破解验证码)

2.抖音下载一个视频


f463957016464de6b313a31744930f2b.jpeg

1.HTTP协议与WEB开发

我们要知其然并知其所以然,在讲爬虫之前先把他的 “根” 说清楚

互联网是什么?

简单地说:互联网本身就是一种信息的分享和传递,我们上网的过程本质上就是一种下载资源的过程。

(1)简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网
(WWW:World Wide Web)服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
815d219108254692862490019f8422e5.png

(2)请求协议和响应协议

http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字文本。

be129ee9bb3c462d83ecbd08820ae37f.png

一个完整的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反爬

73a7f533410b4df1917338f7c60edaac.png

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)

a1555502a72047958ba532346461d293.png

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反爬

039641820bf042639f9810e6701137fe.png

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请求以及请求体参数

d887fdf768f04a54a5d8bf09745b37ca.png

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)直接爬取媒体数据流

60c3b010217c48ec96b4a49b9194a987.png

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.模拟登陆(破解验证码)

要求:

  1. 目标网站:古诗文网

2.抖音下载一个视频

要求:

  1. 目标网站:抖音
  2. 用户:刘浩存

先清空一下数据包

2a7ac4de211d4fb798b604aaff5a4ea7.png

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

00b6996e60f64c9dbc81ba14406c815d.png

也可以筛选一下

fa25ce1002b344a59b680848727dd411.png

找到图片的绝对网址

fb95a2839cae43a382e185fb31583b31.png

试一下能否播放

939bd5b763894b87b7217157509780a3.png

编写爬虫代码,下载视频

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)

检查是否下载成功

aa756c6d4e2c4683b4034bbf86c35b7b.png

liuhaocun.mp4

本文所涉及的他人内容包括但不限于文字、图片、音频、视频等,来源于各个渠道和资源,并非本文作者原创。在使用他人内容时,本文作者已经尽力确保遵循适用的版权法律和相关规定,并尽力寻找和确认素材的合法来源。在此声明中的他人内容的使用,仅出于分享和传播信息的目的,并不代表本文作者对其内容的观点或立场进行支持或认可。本文作者对他人内容的准确性、完整性或时效性不承担责任,并且不保证这些素材没有侵犯任何第三方的知识产权。

素材来源:

  • 路飞学城

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

地面文物古迹保护方案,用科技为文物古迹撑起“智慧伞”

一、行业背景 当前,文物保护单位的安防系统现状存在各种管理弊端,安防系统没有统一的平台,系统功能不足、建设标准不同,产品和技术多样,导致各系统独立,无法联动,形成了“信息孤岛”。地面文物…

RabbitMQ-死信交换机和死信队列

1. 简介 1.1 DLX简介 DLX: Dead-Letter-Exchange 死信交换器,死信邮箱 当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。 如下图所示: 其实死信队列就是一个普通的交换机,有些队列的消息…

lesson2(补充)关于const成员函数

个人主页:Lei宝啊 愿所有美好如期而遇 前言: 将const 修饰的 “ 成员函数 ” 称之为 const 成员函数 , const 修饰类成员函数,实际修饰该成员函数 隐含的 this 指针 ,表明在该成员函数中不能对类的任何成员进行修改…

(a /b)*c的值

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

基于华为云 IoT 物联网平台实现家居环境实时监控

01 智能家居环境监测 智能家居环境监测采用 Ruff 开发板作为主控,串口线连接温湿度传感器 DHT11 和空气质量传感器 SDS011,每5分钟采集一次数据,通过 MQTT 协议发送到华为云 IoT 物联网平台,并基于数据分析服务实时计算出整个家庭…

如何批量给视频添加logo水印?

如果你想为自己的视频添加图片水印,以增强视频的辨识度和个性化,那么你可以使用固乔剪辑助手软件来实现这一需求。下面就是详细的操作步骤: 1.下载并打开固乔剪辑助手软件,这是一款简单易用的视频剪辑软件,功能丰富&am…

el-table多选表格 实现默认选中 删除选中列表取消勾选等联动效果

实现效果如下&#xff1a; 代码如下&#xff1a; <template><div><el-tableref"multipleTable":data"tableData"tooltip-effect"dark"style"width: 100%"selection-change"handleSelectionChange"><…

哈希算法:哈希算法在分布式系统中有哪些应用?

文章来源于极客时间前google工程师−王争专栏。 哈希算法除了上篇的四个应用&#xff08;安全加密、数据校验、唯一标识、散列函数&#xff09;&#xff0c;还有三种应用&#xff1a;负载均衡、数据分片、分布式存储。 这三个应用都跟分布式系统有关。哈希算法是如何解决这些分…

【斗罗二】霍雨浩迷惑审查,戴华斌故意挑衅,惨败者屈服下跪

【侵权联系删除】【文/郑尔巴金】 深度爆料&#xff0c;自《绝世唐门》宣布问世以来&#xff0c;其在国漫圈引发的关注和热议便如火如荼。作为《斗罗大陆》的续作&#xff0c;这部作品无疑继承了前作的荣光&#xff0c;甚至被无数粉丝期待着能再创辉煌。在各大社交媒体和国漫论…

2021年06月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 执行下列代码后&#xff0c;运行结果是&#xff1f; seq[hello,good,morning] s*.join(seq) print(s)A: hello*good*m…

LibreOffice编辑excel文档如何在单元格中输入手动换行符

用WPS编辑excel文档的时候&#xff0c;要在单元格中输入手动换行符&#xff0c;可以先按住Alt键&#xff0c;然后回车。 而用LibreOffice编辑excel文档&#xff0c;要在单元格中输入手动换行符&#xff0c;可以先按住Ctrl键&#xff0c;然后回车。例如&#xff1a;

软通动力:打造AI第二增长曲线,图谋新发展

【科技明说 &#xff5c; 重磅专题】 软通动力对于AI的想法还是比较久了&#xff0c;之前在与业内朋友聊到软通动力之时&#xff0c;曾提到软通动力的根基还是在于其多年来的软件服务能力&#xff0c;目前借助AI技术创新的机遇将软件服务能力进一步放大&#xff0c;扩展到更多行…

uni-app小程序,uview-ui组件样式无法穿透修改的解决办法

1.首先设置以下选项.该选项的作用是让微信小程序允许样式穿透. 在需要改动的文件内加上 options: { styleIsolation: shared } 2.然后再使用vue的样式穿透写法. ::v-deep .类样式{} 或者 /deep/ .类样式{}

Linux操作系统概述3——进程相关操作讲解(进程概念、xinetd守护进程、进程管理命令)

目录 进程的概念 程序与进程的关系 进程的分类 守护进程的分类 进程的PID 进程的状态 xinetd 守护进程服务 xinetd基本概念 xinetd工作原理 xinetd相关文件介绍 守护进程的管理命令 chkconfig 命令 service 命令 systemctl命令 查看进程状态相关命令 一般程序处…

Ceres 使用笔记

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 概念理解 Part.II 简单使用Chap.I Ceres 中主要函数简介Chap.II 一个简单的实例 Reference Part.I Introduction Ceres 1 是由 Google 开发的开源 C 通用非线性优化库&#xff0c;与 g2o 并列为目前视觉 SLAM 中应用最广泛…

el-tree横向纵向滚动条

el-tree未展开时样式 el-tree展开时样式 给容器一个高度&#xff0c;然后样式加上overflow: scroll&#xff0c;这样纵向滚动条就出来了。 <el-card style"height: 528px;overflow: scroll"><el-inputplaceholder"输入关键字进行过滤"v-model&…

Day13力扣打卡

打卡记录 奖励最顶尖的 k 名学生(哈希表排序) 用哈希表对所有的positive与negative词条进行映射&#xff0c;然后遍历求解。tip&#xff1a;常用的分割字符串的操作&#xff1a;1.stringstream配合getline() [格式buf, string, char]2.string.find()[find未找到目标会返回npos…

Vite+Vue3项目全局引入scss文件

前言 Sass 是世界上最成熟、最稳定、最强大的专业级CSS扩展语言&#xff01;在日常项目开发过程中使用非常广泛&#xff0c;今天主要讲一下 ViteVue3 项目中该如何全局引入 scss 文件&#xff0c;引入混合 mixin 文件的不同配置。捎带说一下 Vue2 中的引入方式做一下简单的对比…

哪一个更好?Spring boot还是Node.js

前言 本篇文章有些与众不同&#xff0c;由于我自己手头有些关于这个主题的个人经验&#xff0c;受其启发写出此文。虽然SpringBoot和Node.js服务于很不一样的场景&#xff0c;但是这两个框架共性惊人。其实每种语言都有不计其数的框架&#xff0c;但仅仅一部分是真正卓越的。如…

基于stm32的ADC读取烟雾报警器的数值

本文想要设计一个设计一个有stm32控制的烟雾报警系统。通过MQ-2烟雾报警器将获取模拟的数值传递给stm32的ADC外设并在串口助手上显示对应的电压值。烟雾报警器浓度越高&#xff0c;他的电压就越高&#xff0c;但是不会超过3.3V。设置一个电压临界值&#xff0c;当传输回来的电压…