python网络爬虫的基本使用
各位帅哥美女点点关注,有关注才有动力啊
网络爬虫
引言
我们平时都说Python爬虫,其实这里可能有个误解,爬虫并不是Python独有的,可以做爬虫的语言有很多例如:PHP、JAVA、C#、C++、Python。
为什么Python的爬虫技术会异军突起呢?
Python火并不是因为爬虫技术,而是AI人工智能、数据分析(GoogleAlphaGo)等等功能;这些Java其实也能做,而选择Python做爬虫是因为Python相对来说比较简单,而且功能比较齐全。
什么是网络爬虫
网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。通俗来讲,网络爬虫就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。
为什么要学习网络爬虫
互联网大数据时代,给予我们的是生活的便利以及海量数据爆炸式的出现在网络中。过去,我们通过书籍、报纸、电视、广播或许信息,这些信息数量有限,且是经过一定的筛选,信息相对而言比较有效,但是缺点则是信息面太过于狭窄了。不对称的信息传导,以致于我们视野受限,无法了解到更多的信息和知识。 互联网大数据时代,我们突然间,信息获取自由了,我们得到了海量的信息,但是大多数都是无效的垃圾信息。 例如新浪微博,一天产生数亿条的状态更新,而在百度搜索引擎中,随意搜一条就有成千上百万条信息。 在如此海量的信息碎片中,我们如何获取对自己有用的信息呢? 答案是筛选! 通过某项技术将相关的内容收集起来,在分析删选才能得到我们真正需要的信息。 这个信息收集分析整合的工作,可应用的范畴非常的广泛,无论是生活服务、出行旅行、金融投资、各类制造业的产品市场需求等等……都能够借助这个技术获取更精准有效的信息加以利用。 网络爬虫技术,虽说有个诡异的名字,让能第一反应是那种软软的蠕动的生物,但它却是一个可以在虚拟世界里,无往不前的利器。
浏览网站时所能看见的数据都可以通过爬虫程序保存下来,例如:文字、图片、音频和视频。
应用场景
-
数据展示:将爬取的数据展示到网页或者APP上,比如:百度新闻、今日头条
-
数据分析:从数据中寻找一些规律,比如:慢慢买(价格对比)、TIOBE排行等
-
自动化测试:比如想要测试一个前端页面的兼容性、前端页面UI是否有bug,只需要模拟执行表单提交、键盘输入等页面操作
网络爬虫是否合法
爬虫作为一种计算机技术就决定了它的中立性,因此爬虫本身在法律上并不被禁止,但是利用爬虫技术获取数据这一行为是具有违法甚至是犯罪的风险的。所谓具体问题具体分析,正如水果刀本身在法律上并不被禁止使用,但是用来捅人,就不被法律所容忍了。
爬虫技术与反爬虫技术
爬虫目前能造成的技术上影响在于野蛮爬取,即多线程爬取
,从而导致网站瘫痪
或不能访问,这也是大多数网络攻击所使用的方法之一。
由于爬虫会批量访问网站,因此许多网站会采取反爬措施。例如:1.IP频率、流量限制;2.请求时间窗口过滤统计;3.识别爬虫等。
但这些手段都无法阻止爬虫开发人员优化代码、使用多IP池等方式规避反爬措施,实现大批量的数据抓取。由于网络爬虫会根据特定的条件访问页面,因而爬虫的使用将占用被访问网站的网络带宽并增加网络服务器的处理开销,甚至无法正常提供服务。
Robots协议
robots(也称为爬虫协议、机器人协议等)称是“网络爬虫排除标准”是网站跟爬虫间的一种协议(国际互联网界通行的道德规范),用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。
参考地址:https://www.zhihu.com/robots.txt
-
以Allow开头的URL地址:允许某爬虫引擎访问
-
以Disallow开头的URL地址:不允许某爬虫引擎访问
总之,盗亦有道,君子之约。
网络爬虫步骤及相关技术
抓包
-
浏览器抓包(仅能抓取浏览器的数据包)
-
抓包工具fiddler(基本用于抓取HTTP)
cookie与session的区别与连系?
User-Agent: 浏览器信息
HTTP与HTTPS
-
HTTP 与 HTTPS 有哪些区别?
(1)HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
(2)HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
(3) HTTP 的端口号是 80,HTTPS 的端口号是 443。
(4)HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
-
HTTPS 解决了 HTTP 的哪些问题?
HTTP 由于是明文传输,所以安全上存在以下三个风险:
窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
冒充风险,比如冒充淘宝网站,用户钱容易没。
HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:
信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾
广告。
身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。
可见,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。
-
HTTPS 是如何解决上面的三个风险的?
混合加密的方式实现信息的机密性,解决了窃听的风险。
摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完
整性,解决了篡改的风险。
将服务器公钥放入到数字证书中,解决了冒充的风险。
快速入门
安装requests
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装和卸载的功能,现在大家用到的所有包不是自带的就是通过pip安装的。Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。
前端:npm install
后端:maven
-
显示版本和路径
pip --version
-
安装指定版本的requests
pip install requests # 最新版本 pip install requests==2.11.0 # 指定版本 pip install requests>=2.11.0 # 最小版本
由于所有请求都需要经过fiddler这个抓包软件进出。所以如果requests与fiddler一起使用,请不要使用requests最新版本,不然直接会卡死,降版本使用即可。
也可以直接通过PyCharm来安装requests模块,点击File -> Settings -> 项目: python10
,选择Python解释器,点击 +
号,输入选择requests模块并指定安装版本号(例如:2.11.0),最后点击 安装包(I)
按钮即可。
案例演示
创建纯python项目,新建demo.py并导入requests模块
# 导入模块 import requests # 通过requests模块模拟发送get请求,并得到响应对象response resp = requests.get(url)
response响应对象属性介绍:
属性 | 说明 |
---|---|
encoding | 文本编码。例如:resp.encoding="utf-8" |
status_code | 响应状态码。 200 -- 请求成功 4XX -- 客户端错误 5XX -- 服务端响应错误 |
text | 响应体。 |
content | 字节方式响应体,会自动解码gzip和deflate编码的响应数据 |
url | 响应的URL地址。 |
-
案例一:快速入门,爬取百度官网并保存到本地
请结合fiddler抓包工具进行以下代码测试。
resp = requests.get("http://www.baidu.com/")
定制请求头headers,请结合知乎网的Robots协议进行设置。伪装User-Agent
resp = requests.get("http://www.zhihu.com/signin?next=%2F",headers={"User-agent": "bingbot"})
定制请求头headers,模拟使用浏览器的User-Agent值。
resp = requests.get("http://www.baidu.com/",headers={"User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"})
保存文件的方式可使用pathlib和open等两种方式。
-
案例二:传递URL参数
POST和GET请求方式在传递URL参数时,稍有不同。
GET方式 | POST方式 |
---|---|
params={"key1":"value1","key2":"value2"} | data={"key1":"value1","key2":"value2"} |
response=requests.get(url,params=params) | response=requests.post(url,data=data) |
爬取必应搜索“中国”之后的网页,保存为“中国.html”
resp = requests.get("https://cn.bing.com/search",headers={"User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"},params={"q":"中国"})
requests缺点:不能爬取ajax动态加载的数据
相关文章:

python网络爬虫的基本使用
各位帅哥美女点点关注,有关注才有动力啊 网络爬虫 引言 我们平时都说Python爬虫,其实这里可能有个误解,爬虫并不是Python独有的,可以做爬虫的语言有很多例如:PHP、JAVA、C#、C、Python。 为什么Python的爬虫技术会…...

AI Agent开发第74课-解构AI伪需求的魔幻现实主义
开篇 🚀在之前的系列中我们狂炫了AI Agent的各种高端操作(向量数据库联动、多模态感知、动态工作流等…),仿佛每个程序员都能用LLM魔法点石成金✨。 但今天咱们要泼一盆透心凉的冷水——当企业把AI当成万能胶水强行粘合所有需求时,连电风扇都能被玩出量子纠缠的魔幻现实…...

【卫星通信】通信卫星链路预算计算及其在3GPP NTN中的应用
引言 卫星通信是现代信息传播的重要手段,广泛应用于电信、广播、气象监测、导航等领域。卫星链路预算计算是设计和优化卫星通信系统的重要步骤,它帮助工程师评估信号在传输过程中的衰减和增益,从而确保系统在预定条件下可靠地工作。 1. 链路…...
HTTP请求方法:GET与POST的使用场景解析
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 HTTP协议定义了多种请求方法,其中GET和POST是最常用的两种。它们在Web开发中承担着不同的角色,理解其核心差异和使用场景是构建高效、…...
第十五章:数据治理之数据目录:摸清家底,建立三大数据目录
在上一篇随想篇中,介绍了数据资源资产化的过程,理解了数据资源、数据资产的区别。这些对于本章的介绍会有帮助,如果仍有疑问可以看上一篇【数据资源到数据资产的华丽转身 ——从“沉睡的石油”到“流动的黄金”】。 说到本章要介绍的数据目录…...

c++命名空间的作用及命名改编
c命名空间的作用及命名改编 命名空间 namespace的作用: std::命名空间,命名空间(namespace)是 C 中用于解决标识符命名冲突问题的机制。在大型程序开发中,不同模块可能会使用相同名称的变量、函数或类等标识符&…...
Go核心特性与并发编程
Go核心特性与并发编程 1. 结构体与方法(扩展) 高级结构体特性 // 嵌套结构体与匿名字段 type Employee struct {Person // 匿名嵌入Department stringsalary float64 // 私有字段 }// 构造函数模式 func NewPerson(name string, age int) *Pe…...

echarts实现项目进度甘特图
描述 echarts并无甘特图配置项,我们可以使用柱状图模拟,具体配置项如下,可以在echarts直接运行 var option {backgroundColor: "#fff",legend: {data: ["计划时间","实际时间"],align: "right",…...
Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中
Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中 在 Flutter 中,build 方法被设计在 StatefulWidget 的 State 类中而非 StatefulWidget 类本身,这种设计基于几个重要的架构原则和实际考量: 1. 核心设计原因 1.1 生命周期管理…...
C#串口打印机:控制类开发与实战
C#串口打印机:控制类开发与实战 一、引言 在嵌入式设备、POS 终端、工业控制等场景中,串口打印机因其稳定的通信性能和广泛的兼容性,仍是重要的数据输出设备。本文基于 C# 语言,深度解析一个完整的串口打印机控制类Printer&…...

2025深圳国际无人机展深度解析:看点、厂商与创新亮点
2025深圳国际无人机展深度解析:看点、厂商与创新亮点 1.背景2.核心看点:技术突破与场景创新2.1 eVTOL(飞行汽车)的规模化展示2.2 智能无人机与无人值守平台2.3 新材料与核心零部件革新2.4 动态演示与赛事活动 3.头部无人机厂商4.核…...
Electron 后台常驻服务实现(托盘 + 开机自启)
基于 electron-vite-vue 项目结构 本篇将详细介绍如何为 Electron 应用实现后台常驻运行,包括: ✅ 创建系统托盘图标(Tray)✅ 支持点击托盘菜单控制窗口显示/退出✅ 实现开机自启功能(Auto Launch) &#…...
Spring Boot与Kafka集成实践:从入门到实战
Spring Boot与Kafka集成实践 引言 在现代分布式系统中,消息队列技术扮演着至关重要的角色。Kafka作为一款高性能、高吞吐量的分布式消息队列系统,被广泛应用于日志收集、流处理、事件驱动架构等场景。本文将详细介绍如何在Spring Boot项目中集成Kafka&…...

人形机器人通过观看视频学习人类动作的技术可行性与前景展望
摘要 本文深入探讨人形机器人通过观看视频学习人类动作这一技术路线的正确性与深远潜力。首先阐述该技术路线在模仿人类学习过程方面的优势,包括对人类动作、表情、发音及情感模仿的可行性与实现路径。接着从技术原理、大数据训练基础、与人类学习速度对比等角度论证…...

第三十四天打卡
DAY 34 GPU训练及类的call方法 知识点回归: CPU性能的查看:看架构代际、核心数、线程数 GPU性能的查看:看显存、看级别、看架构代际 GPU训练的方法:数据和模型移动到GPU device上 类的call方法:为什么定义前向传播时可…...
打卡day35
一、模型结构可视化 理解一个深度学习网络最重要的2点: 了解损失如何定义的,知道损失从何而来----把抽象的任务通过损失函数量化出来了解参数总量,即知道每一层的设计才能退出—层设计决定参数总量 为了了解参数总量,我们需要知…...
【【嵌入式开发 Linux 常用命令系列 19 -- linux top 命令的交互使用介绍】
文章目录 Overview常用的交互命令(top 运行时可直接按键)示例使用场景按内存排序,显示某个用户的前 10 个进程:杀死占用资源最多的进程调整刷新频率为 1 秒 提示 Overview 在linux环境下办公经常会遇到杀进程,查看cpu…...

配置tomcat时,无法部署工件该怎么办?
当我们第一次在IDEA中创建Java项目时,配置tomcat可能会出现无法部署工件的情况,如图: 而正常情况应该是: 那么该如何解决呢? 步骤一 点开右上角该图标,会弹出如图页面 步骤二 步骤三 步骤四...

.NET外挂系列:8. harmony 的IL编织 Transpiler
一:背景 1. 讲故事 前面文章所介绍的一些注入技术都是以方法为原子单位,但在一些罕见的场合中,这种方法粒度又太大了,能不能以语句为单位,那这个就是我们这篇介绍的 Transpiler,它可以修改方法的 IL 代码…...

基于netty实现视频流式传输和多线程传输
文章目录 业务描述业务难点流式传输客户端(以tcp为例)服务端测试类测试步骤多线程传输客户端服务端测试类测试步骤多线程流式传输总结业务描述 多台终端设备持续给数据服务器(外)发送视频数据,数据服务器(外)通过HTTP协议将数据经过某安全平台转到数据服务器(内),数据…...

全面指南:使用Node.js和Python连接与操作MongoDB
在现代Web开发中,数据库是存储和管理数据的核心组件。MongoDB作为一款流行的NoSQL数据库,以其灵活的数据模型、高性能和易扩展性广受开发者欢迎。无论是使用Node.js还是Python,MongoDB都提供了强大的官方驱动和第三方库,使得数据库…...

游戏引擎学习第308天:调试循环检测
回顾并为今天的内容做准备 我们正在进行游戏开发中的精灵(sprite)排序工作,虽然目前的实现已经有了一些改进,情况也在逐步好转,我们已经实现了一个图结构的排序算法,用来处理精灵渲染顺序的问题。然而&…...
Java 海康录像机通过sdk下载的视频无法在线预览问题
下载的视频格式不对,需将视频转码为H.264/AAC的MP4格式 使用 ffmpeg 对视频进行转码 ffmpeg可以对视频进行转码、加水印等操作,还是挺强大的 代码如下 public static void transcodeToMP4(String inputPath, String outputPath) throws IOException, In…...

WPF性能优化之延迟加载(解决页面卡顿问题)
文章目录 前言一. 基础知识回顾二. 问题分析三. 解决方案1. 新建一个名为DeferredContentHost的控件。2. 在DeferredContentHost控件中定义一个名为Content的object类型的依赖属性,用于承载要加载的子控件。3. 在DeferredContentHost控件中定义一个名为Skeleton的ob…...

移植 FART 到 Android 10 实现自动化脱壳
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ FART 源码 FART 是 ART 环境下基于主动调用的自动化脱壳方案。 关于 FART 详细介绍参考: FART 自动化脱壳框架简介与脱壳点的选择 FART 主动调用…...
ES的Refresh、Flush、Merge操作对性能的影响? ES如何实现近实时(NRT)搜索? ES聚合查询的Terms和Cardinality区别?
一、Refresh/Flush/Merge机制与性能影响 Refresh(刷新) 作用:将内存缓冲区(In-memory buffer)数据写入文件系统缓存生成新段(Segment),使文档可被搜索性能影响: 默认每…...
WebXR 虚拟现实开发
WebXR(Web Extended Reality)是用于在浏览器中构建**虚拟现实(VR)和增强现实(AR)**应用的 Web 标准。它允许开发者通过 JavaScript 和 WebGL 创建沉浸式体验,无需安装原生应用。以下是 WebXR 开发的基本知识点和开发指南: 一、WebXR 的核心概念 1. XR 设备分类 VR(Vi…...

COMPUTEX 2025 | 广和通创新解决方案共筑AI交互新纪元
5月20日至23日,广和通携多领域创新解决方案亮相2025年台北国际电脑展(COMPUTEX 2025),台北南港展览馆#K0727a展位。此次展会,广和通围绕“Advancing Connectivity Intelligent Future”为主题,设置四大核心…...

了解Android studio 初学者零基础推荐(3)
kotlin中的数据类及对象 使用泛型创建可重复使用的类 我们将常在线答题考试,有的考试题型包括判断,或者填空,以及数学题,此外试题内容还包括难易程度:"easy”,"medium","hard",…...

Spring 定时器和异步线程池 实践指南
前言:Spring:异步线程池和定时器 原理篇 一、Spring Scheduler 1. 创建一个 SpringBoot项目,在启动类上添加 EnableScheduling 注解,表示开启定时任务。 2. 创建SchedulerService,在方法上面启用Scheduled 注解 在方…...