爬虫 — 反爬

news2024/11/24 4:39:55

目录

  • 一、UA 反爬
  • 二、Cookie 验证与反爬
    • 1、Cookie 简介
    • 2、使用 Cookie 原因
    • 3、Cookie 作用
      • 3.1、模拟登录
      • 3.2、反反爬
  • 三、Referer 反爬

一、UA 反爬

UA(User Agent):用户代理,是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

在这里插入图片描述

# 1. 导入模块
import requests  # 第三方库,用于 HTTP 请求和响应

# UA 反爬
head = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
}

# 2. 确定 url:分析是动态加载还是静态加载
response = requests.get(" https://www.baidu.com/", headers=head)
print(response)  # 200 代表请求成功
print(response.request.headers)  # 返回此响应的请求对象中的请求头数据字典
print(response.text)  # 内容获取

二、Cookie 验证与反爬

1、Cookie 简介

Cookie 实际上是一小段的文字信息key - value 格式)。浏览器向服务器发起请求,如果服务器需要记录该状态,服务器就会向浏览器颁发一个 Cookie 。浏览器会把 Cookie 保存起来。当浏览器再请求该服务器时,浏览器把请求的网址连同该 Cookie 一同提交给服务器。服务器检查该 Cookie,以此来辨认浏览器状态。

2、使用 Cookie 原因

浏览器与 Web 服务器之间是使用 HTTP 协议进行通讯的,而 HTTP 协议本身是无状态的。这时就需要一个能保存访问状态的信息,去告诉服务器我已经访问过了,这个信息就可以使用 Cookie 来保存。

3、Cookie 作用

可以用来保存用户使用浏览器访问网站的状态用户信息

3.1、模拟登录

清除 Cookie 就会需要重新登录

# 需求:获取qq空间的源码内容

# 导入模块
import requests  # 第三方库,用于 HTTP 请求和响应

# 指定 url
url = 'https://user.qzone.qq.com/1239079951/'

# 设置请求头参数
head = {
    'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
    'cookie' : 'welcomeflash=1239079951_58028; 1239079951_todaycount=0; 1239079951_totalcount=711; zzpaneluin=; zzpanelkey=; _qpsvr_localtk=0.7968639470198942; pgv_pvid=2658927712; pgv_info=ssid=s6023428415; uin=o1239079951; skey=@a2rnf3d2i; RK=Pj/cU4cYQh; ptcz=bee843eefb32a24e3fbb4779c00f3b4c63e2147d141bfab48ec2d373876a69fc; p_uin=o1239079951; pt4_token=oAjhJ-Oz3bRCQxzVp1h5a-a0pVPqpKqQoY1zuBFJVSk_; p_skey=XeyEpGYXjpRu7BXRy0X9ziStf01fdmTm8aYrLjWtB0E_; Loading=Yes; qz_screen=1707x960; QZ_FE_WEBP_SUPPORT=1'
}

# 发请求,获取响应
res = requests.get(url, headers=head)

# 获取数据内容
print(res.text)

# 存储数据到网页
with open('qq.html', 'w', encoding='utf-8') as f:
    f.write(res.text)

3.2、反反爬

# 需求:12306 获取车次,商务座,一等座,二等座车票信息

# 导入模块
import requests  # 第三方库,用于 HTTP 请求和响应

# 确定 url,动态加载
url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2023-05-10&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT'

# 请求头
head = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
    'Cookie': '_uab_collina=168318675077602254447501; JSESSIONID=C5AA287034ADDC01F700CDA3D9EE46D2; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_fromStation=%u5317%u4EAC%2CBJP; _jc_save_toStation=%u4E0A%u6D77%2CSHH; _jc_save_wfdc_flag=dc; _jc_save_fromDate=2023-05-10; BIGipServerotn=2280128778.50210.0000; BIGipServerpassport=820510986.50215.0000; fo=w8uwzem75d825acts7YB1-2Bj97FKHZ78kByS5lyysh0IxfhP_uETE4wnK33Yo8kl4iHJ4i6APzKUi_i9eCKSkcy49YyQobD21EHjKr2nl_AwYwjoBRMxTekPqrkAguvB1KD96WmtXrXGXSvuKQdfXZnZqu7EeUY6ieU93J0lpqamZUqq0piTKoPq0s; route=9036359bb8a8a461c164a04f8f50b252; _jc_save_toDate=2023-05-09'
}

# 发请求
res = requests.get(url, headers=head)

# 打印文本内容
# print(res.text)  # 输出数据为 json 格式

# 打印内容
json_data = res.json()  # 将 json 格式的数据自动转换
result = json_data['data']['result']
# print(result)

# 数据拆分
# data = result[2]  # 找到一个数据比较全的
# datas = data.split("|")  # 将数据拆分成列表
# print(datas)

# 枚举获取数据对应下标
# for index,value in enumerate(datas):
#     print(index,value)  # 车次3 特等座32 一等座31 二等座30

# 循环打印目标数据
for i in result:
    data = i.split("|")
    print(f'车次为{data[3]},特等座为{data[32]},一等座为{data[31]},二等座为{data[30]}')

三、Referer 反爬

Referer:是 header 的一部分,当浏览器向 Web 服务器发送请求的时候,一般会带上 Referer,用来表示从哪儿链接到当前的网页。

# 需求:获取梨视频中的视频

# 导入模块
import requests  # 第三方库,用于 HTTP 请求和响应

# 确定 url
url = 'https://www.pearvideo.com/videoStatus.jsp?contId=1198526&mrd=0.44597986044359117'

# 请求头
referer = 'https://www.pearvideo.com/video_1198526'
head ={
    'Referer': referer
}

# 发送请求
res = requests.get(url, headers=head)

# 获取数据
data = res.json()  # 将 json 格式的数据自动转换
src_url = data['videoInfo']['videos']['srcUrl'] # 找到视频 url

# https://video.pearvideo.com/mp4/short/20171114/1683772197751-11122362-hd.mp4 爬取的视频链接
# https://video.pearvideo.com/mp4/short/20171114/cont-1198526-11122362-hd.mp4 真实视频链接
# 1683772197751 替换 cont-1198526
# replace(old, new)

# 找到时间戳
systemTime = data['systemTime']

# 获取编号
id = 'cont-' + referer.split('_')[1]

# 时间戳替换成视频 id
video_url = src_url.replace(systemTime, id)
print(video_url)

# 向视频 url 发请求
res1 = requests.get(video_url)

# 视频文件是二进制 —— wb 模式
with open('v1.mp4','wb') as f:
    f.write(res1.content)

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入解读什么是期权的内在价值和时间价值?

期权品种越来越丰富,对于大家套利对冲都有很多的选择。而有些初学者对时间价值一直不理解,今天呢,就给大家讲一讲深入解读什么是期权的内在价值和时间价值?本文来自:期权酱 01在期权交易过程中,想必大家都会…

Layui快速入门之第十四节 分页

目录 一:基本用法 API 渲染 属性 二:自定义主题 三:自定义文本 四:自定义排版 五:完整显示 一:基本用法 分页组件 laypage 提供了前端的分页逻辑,使得我们可以很灵活处理不同量级的数…

SAP MM学习笔记32 - 购买依赖的承认(采购申请的审批)

多数公司都不会随便让采购员买东西的,而是要设置一个审批,甚至是层层审批,之后才能购买。 一般流程是 购买依赖(采购申请) > 购买发注(采购),这个承认(审批&#xf…

PyCharm使用技巧小记

目录 1 汉化2 主题3 关联滚轮和字体大小4 快捷键4.1 常用快捷键4.2 查看软件快捷键5 上下文菜单取消 注:本文基于PyCharm 2023.2.1 版本进行截图演示。不同版本有所差异,注意区分。 1 汉化 1、点击右上角‘齿轮’图标 2、单击插件 3、在上方搜索框中…

python selenium如何带cookie访问网站

python selenium如何带cookie访问网站 要使用Python的Selenium库带有cookie访问网站,你可以按照以下步骤进行操作: 一、流程介绍 安装Selenium库(如果尚未安装): pip install selenium导入Selenium库并启动一个浏览…

DragGAN使用记录

效果图 调整人物动作 调整裙子长度 调整动物的动作 DragGAN介绍 DragGAN是一种基于人工智能的图像编辑工具,它可以根据用户的输入生成逼真的图像。与传统的图像编辑工具只能扭曲或裁剪现有的像素不同,DragGAN可以创建与用户意图匹配的新内容。 Drag…

Kubernetes网络揭秘:看完你就懂了

一、Master集群网络 master集群的网络比较简单,和通常的负载均衡集群一样。多个节点的apiserver的ip与端口(6443)使用负载均衡的ip与端口。在master/node节点join时均使用此负载均衡的ip与端口,这样就是master节点的集群网络。 master 节点之间的网络&a…

QT:使用多窗口做一个登录注册小项目(登录窗口、登录结果窗口、注册窗口)

widget.h(登录窗口) #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <Qmap> //模板类class Widget : public QWidget …

7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位

随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集成到蜗牛自动化…

软件测试:什么是敏捷测试?

1. 什么是敏捷测试 敏捷测试是一种在敏捷开发环境中进行软件测试的方法&#xff0c;不同于传统瀑布模型中的测试阶段&#xff0c;敏捷测试强调持续测试、快速反馈和合作开发。 敏捷测试与敏捷开发相辅相成&#xff0c;通过频繁的迭代和增量开发来提高软件的交付速度和质量。 …

C++QT day9

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…

基于GPIO子系统编写LED灯驱动

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #incl…

【Spring】IOC基本用法

&#x1f388;博客主页&#xff1a;&#x1f308;我的主页&#x1f308; &#x1f388;欢迎点赞 &#x1f44d; 收藏 &#x1f31f;留言 &#x1f4dd; 欢迎讨论&#xff01;&#x1f44f; &#x1f388;本文由 【泠青沼~】 原创&#xff0c;首发于 CSDN&#x1f6a9;&#x1f…

js自带的字体图标

let body document.querySelector(body)body.width 100%for (let i 1; i < 10000; i) {let str &#i;let sm str.big()let st document.createElement(span)st.innerHTML smst.style.fontSize 30pxbody.appendChild(st)} 结果如下

Vue2+Vue3基础入门到实战项目全套教程的学习笔记

内容的视频链接点击此处可进入 这套笔记是按照视频和视频笔记总结的笔记&#xff0c;主要是方便vue的学习或温习&#xff0c;基本抛弃css样式的添加&#xff0c;专注于vue的使用。 第一天 Vue 快速上手 Vue的概念 Vue 是一个用于 构建用户界面 的 渐进式 框架 创建实例 …

在线Excel转JSON工具

在线Excel转JSON工具 上传excel将数据转换成json格式

5-3 pytorch中的损失函数

一般来说&#xff0c;监督学习的目标函数由损失函数和正则化项组成。(Objective Loss Regularization) Pytorch中的损失函数一般在训练模型时候指定。 注意Pytorch中内置的损失函数的参数和tensorflow不同&#xff0c;是y_pred在前&#xff0c;y_true在后&#xff0c;而Tenso…

系统IO和标准IO

一.系统IO 系统 I/O&#xff08;Input/Output&#xff09;是计算机操作系统提供给应用程序的一种输入和输出方式。它通过系统调用&#xff08;系统内核提供的函数&#xff09;来实现数据的读取和写入。系统 I/O 可以用于与文件、设备&#xff08;例如磁盘驱动器、网络接口、串…

哪些情况可以使用自动化测试?

通常&#xff0c;软件测试的测试方式分为人工测试和自动化测试&#xff0c;人工测试是由测试人员编写并执行测试用例&#xff0c;然后观察测试结果与预期结果是否一致的过程;自动化测试是通过测试工具来代替或辅助人工去验证系统功能是否有问题的过程。 采用自动化测试需要满足…

blender怎么设置中文界面

你们知道Blender软件是什么吗&#xff1f;你知道blender怎么设置中文界面吗&#xff1f;Blender是个GNU的3D绘图软件&#xff0c;建模、算图、动画等功能都相当的完整&#xff0c;可以说已经具有了一般商业软件的规模。Blender大部分的功能都有热键&#xff0c;操作起来相当地轻…