python爬虫 - 初识爬虫

 🌈个人主页:https://blog.csdn.net/2401_86688088?type=blog
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

目录

前言

一、爬虫的关键概念

(一)HTTP请求与响应

(二)HTML解析

(三)XPath和CSS选择器

(四)Robots.txt 协议

(五)反爬虫机制

(六)数据清洗

(七)数据存储

(八)多线程与异步

(九)合法性与道德问题

二、爬虫的流程

(一)明确目标与规划

(二)发送请求

(三)解析网页

(四)数据提取

(五)处理与清洗数据

(六)存储数据

(七)处理反爬机制

(八)迭代与调试

(九)数据分析与应用

(十)爬虫流程总结

三、HTTP与HTTPS协议

(一)HTTP 协议

(二)HTTPS 协议

(三)HTTP 与 HTTPS 的区别

(四)总结

四、总结


前言

Python 爬虫是一种通过编写程序自动化访问网页并从中提取信息的技术,通常用于从互联网上收集数据。它能够模拟用户浏览器行为,自动加载网页、抓取数据,并将所需信息存储在数据库或文件中,供后续分析使用。Python 是进行爬虫开发的常用语言,因为它拥有丰富的第三方库和简单易懂的语法,能够快速开发高效的爬虫。


一、爬虫的关键概念

(一)HTTP请求与响应

爬虫通过模拟浏览器发送 HTTP 请求获取网页内容,了解 HTTP 请求的结构是编写爬虫的基础。主要的 HTTP 请求类型有:

  • GET:从服务器获取资源,通常用于爬虫访问网页。

  • POST:向服务器发送数据,常用于提交表单或登录操作。 爬虫收到服务器的响应后,会处理响应中的 HTML、JSON 或其他格式的数据。

(二)HTML解析

网页的内容主要以 HTML 格式呈现,解析 HTML 是提取所需信息的关键。HTML 文档的结构为树形结构,包括标签、属性和文本内容。爬虫通过解析 HTML DOM 树,可以获取特定的标签、属性和内容。常用工具:

  • BeautifulSoup:简化 HTML 文档的解析和导航。

  • lxml:高效的 HTML 解析库,支持 XPath 查询

(三)XPath和CSS选择器

用于从 HTML 文档中精准定位和提取内容的两种常用方法:

  • XPath:XML 路径语言,可以通过路径表达式在 HTML 树中查找节点,非常强大且灵活。

  • CSS 选择器:一种更简洁的选择方式,类似于网页设计中使用的 CSS 样式选择器,适合处理简单的抓取任务。

(四)Robots.txt 协议

Robots.txt 是网站用来控制和限制爬虫行为的协议文件。爬虫应首先检查目标网站是否允许爬取特定内容或页面。Robots.txt 文件位于网站的根目录,常见指令包括:

  • User-agent:指定该规则适用于哪些爬虫。

  • Disallow:不允许爬虫访问的页面或目录。

  • Allow:允许爬虫访问的特定页面或目录。

(五)反爬虫机制

许多网站会采取措施来防止爬虫频繁访问或抓取大量内容,这些措施被称为反爬虫机制。常见的反爬手段包括:

  • IP 限制:通过检测频繁访问的 IP 地址,限制该 IP 的访问。

  • 请求频率限制:网站可能通过检测请求间隔过短来判断是否为爬虫行为。

  • 验证码:要求用户完成验证码以验证是否为真实用户。

  • 动态内容加载:使用 JavaScript 动态加载部分内容,增加爬虫抓取的难度。

应对反爬虫机制的方法:

  • 使用代理 IP:通过不断切换代理 IP,模拟不同用户的访问。

  • 设置请求间隔:避免频繁请求,降低爬虫被检测到的几率。

  • 模拟浏览器行为:通过设置合适的请求头(如 User-Agent)或使用 Selenium 等工具模拟用户点击、滚动等操作。

(六)数据清洗

抓取的数据往往包含许多不需要的内容,例如广告、无用的 HTML 标签等。因此,数据清洗是爬虫后处理阶段的重要任务。通过清洗可以去除冗余信息,确保抓取的数据更加干净和结构化,以便后续的分析。

(七)数据存储

爬虫获取的数据可以以多种形式存储,常见方式包括:

  • 文本文件:如 CSV、JSON 格式,方便快速存储和处理。

  • 数据库:如 MySQL、MongoDB,可以存储大规模、结构化的数据,适合长期管理和使用。

(八)多线程与异步

为了加快爬取速度,爬虫可以使用多线程或异步技术:

  • 多线程爬虫:通过同时运行多个线程,减少等待时间,提高爬取效率。

  • 异步爬虫:通过事件驱动机制,避免线程阻塞,特别适合大量 I/O 操作的场景。常用的异步库包括 aiohttpTwisted

(九)合法性与道德问题

使用爬虫时,必须遵守相关法律法规和道德规范。未经许可地抓取大量数据或绕过反爬虫机制可能涉及侵犯隐私或违反服务条款,甚至可能引发法律纠纷。因此,确保爬虫行为的合法性和网站许可是爬虫开发的重要前提。


二、爬虫的流程

Python 爬虫的流程通常可以分为以下几个步骤:

(一)明确目标与规划

在开始编写爬虫之前,首先需要明确目标,确定要抓取的网站和数据内容。例如,确定需要抓取的网页、数据格式以及存储方式。

(二)发送请求

爬虫通过发送 HTTP 请求来获取网页的内容。常见的请求方式包括 GETPOST。Python 中的 requests 库是处理 HTTP 请求的常用工具。

import requests
url = 'http://example.com'
response = requests.get(url)

在这一步骤中,爬虫向目标网站发送请求,并接收到服务器返回的 HTML 文档。

(三)解析网页

获取网页后,接下来需要解析网页,提取出所需的数据。HTML 文档通常需要通过解析工具进行结构化处理。常用的解析工具包括:

  • BeautifulSoup:通过解析 HTML,能够提取特定标签、文本和属性。

  • lxml:支持 XPath,可以更加精确地定位内容。

  • 正则表达式:用于匹配特定格式的文本。

例如,使用 BeautifulSoup 提取网页标题:

from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string
print(title)

(四)数据提取

解析 HTML 后,需要提取具体的数据。这可以通过标签选择器、XPath 或正则表达式等技术来完成。爬虫根据目标网页的结构,提取想要的内容,如文本、链接、图片等。

举例,提取网页中的所有链接:

links = soup.find_all('a')
for link in links:print(link.get('href'))

(五)处理与清洗数据

抓取到的数据可能包含不需要的冗余信息,因此需要进行数据清洗。例如去除 HTML 标签、空格、换行符等,确保数据符合分析要求。

可以使用 Python 的内置函数或正则表达式来清理数据:

clean_data = raw_data.strip()  # 去除多余的空格

(六)存储数据

数据清洗完成后,需要将数据保存以便后续处理。常见的存储方式包括:

  • 文件存储:如 CSV、JSON、TXT 文件,适合小规模数据存储。

  • 数据库:如 MySQL、MongoDB,适合处理大规模、结构化数据。

import csv
with open('data.csv', 'w') as file:writer = csv.writer(file)writer.writerow(['column1', 'column2'])  # 写入表头writer.writerows(data_list)  # 写入数据

(七)处理反爬机制

在抓取过程中,网站可能会有反爬虫机制来防止过于频繁的请求。为了应对这些反爬机制,爬虫开发者可以采取以下措施:

  • 使用代理 IP:通过更换 IP 地址来避免被封禁。

  • 增加请求间隔:通过设置合理的时间间隔,避免过度访问。

  • 模拟用户行为:如使用 User-Agent 伪装成浏览器请求。

例如,设置 User-Agent 来伪装爬虫请求:

headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)

(八)迭代与调试

在开发和运行爬虫时,可能会遇到各种问题,比如请求失败、数据结构变化、反爬虫机制升级等。此时,需要不断调试和优化爬虫,确保其能够稳定、高效地工作。

  • 多线程或异步:对于大规模爬取任务,可以使用多线程或异步编程来提高爬取效率。

  • 异常处理:添加异常处理代码,确保在发生错误时,程序不会终止并且能够继续抓取其他页面。

(九)数据分析与应用

最后,爬取的数据可以用于各种分析任务,如文本分析、市场研究、情感分析等。爬虫抓取的数据往往是原始数据,需要经过进一步的处理和分析才能产生有价值的结果。

(十)爬虫流程总结

整个爬虫流程包括从请求网页、解析数据到数据清洗、存储和反爬机制的处理。流程的每一步都可以根据实际需求进行调整和优化。以下是常见的爬虫流程图示:

  1. 明确抓取目标

  2. 发送 HTTP 请求

  3. 解析网页

  4. 数据提取

  5. 数据清洗

  6. 存储数据

  7. 处理反爬虫

  8. 调试优化


三、HTTP与HTTPS协议

HTTP(HyperText Transfer Protocol,超文本传输协议)和 HTTPS(HyperText Transfer Protocol Secure,安全超文本传输协议)是两种用于在客户端(如浏览器)和服务器之间传输数据的网络协议。它们的主要区别在于安全性和数据传输方式。

(一)HTTP 协议

HTTP 是一种无状态、基于请求-响应模式的通信协议,用于在客户端和服务器之间传输数据。它的主要特点如下:

HTTP 特点:

  • 明文传输:HTTP 以明文的形式传输数据,数据在传输过程中没有任何加密,这意味着第三方可以轻易拦截并读取通信内容。

  • 无状态:HTTP 是无状态协议,每个请求都是独立的,服务器不会记录前后请求的状态,因此每次请求都需要传递必要的信息,比如身份验证信息。

  • 简单快速:HTTP 协议设计相对简单,易于实现,通信效率高。

HTTP 工作过程:

  1. 客户端发送 HTTP 请求到服务器。

  2. 服务器接收请求后处理,并将相应的资源返回给客户端。

  3. 客户端解析服务器响应,显示网页或执行相关操作。

HTTP 请求示例

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

HTTP 的不足:

  • 安全性低:由于 HTTP 使用明文传输,任何中间人(如黑客)都可以拦截并读取传输的数据,容易发生数据泄露、篡改等安全问题。

  • 无法验证服务器身份:用户无法通过 HTTP 验证自己连接到的服务器是否是合法的,可能会遭遇钓鱼网站。

(二)HTTPS 协议

HTTPS 是 HTTP 的安全版本,它通过 SSL(Secure Sockets Layer)/TLS(Transport Layer Security) 协议在客户端和服务器之间建立加密连接,确保数据的安全传输。HTTPS 的基本原理是在 HTTP 之上添加了一层加密协议来保护数据的完整性和隐私性。

HTTPS 特点:

  • 加密传输:HTTPS 使用 SSL/TLS 协议对数据进行加密处理,确保数据在传输过程中不会被第三方窃取或篡改。即使中间人截获了数据,由于加密,内容也是无法解读的。

  • 数据完整性:HTTPS 可以通过加密算法和数字签名确保数据传输的完整性,避免数据在传输过程中被修改。

  • 身份验证:HTTPS 使用 SSL/TLS 证书来验证服务器的身份,确保客户端连接的是可信的服务器。这避免了钓鱼网站等问题。

HTTPS 工作过程:

  1. 客户端向服务器发送请求,并要求建立 SSL/TLS 加密连接。

  2. 服务器返回数字证书,客户端验证该证书是否可信。

  3. 如果证书有效,客户端与服务器之间通过 SSL/TLS 协议协商,生成对称密钥用于加密数据。

  4. 后续的通信数据通过加密通道传输。

HTTPS 请求示例

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

与 HTTP 的请求格式相同,但底层使用加密通道进行数据传输。

HTTPS 的优势:

  • 安全性高:由于加密传输和身份验证,HTTPS 保护了数据的隐私性和完整性,防止信息泄露、篡改。

  • 身份验证:通过 SSL/TLS 证书,客户端可以验证服务器身份,防止钓鱼攻击。

  • 搜索排名优化:搜索引擎(如 Google)偏向于对 HTTPS 网站给予更高的排名。

HTTPS 的不足:

  • 性能开销:建立 HTTPS 连接需要 SSL/TLS 握手过程,相比 HTTP 增加了一些额外的开销,影响性能。

  • 证书费用:为了使用 HTTPS,网站需要申请 SSL/TLS 证书,部分证书需要费用。

(三)HTTP 与 HTTPS 的区别

区别点HTTPHTTPS
安全性明文传输,数据易被拦截加密传输,数据安全
端口默认使用端口 80默认使用端口 443
证书不需要证书需要 SSL/TLS 证书
数据完整性无法确保数据完整性,可能被篡改通过加密确保数据不会被篡改
性能由于无加密,性能较好需要加密和解密过程,性能稍逊
身份验证不进行服务器身份验证,易受中间人攻击服务器通过证书进行验证,防止钓鱼网站

(四)总结

  • HTTP 是一种基础的通信协议,使用明文传输数据,适合对安全性要求不高的场景。

  • HTTPS 则在 HTTP 的基础上加入了 SSL/TLS 加密,提供了更高的安全性,适合任何需要保护用户隐私和数据安全的网站。


四、总结

Python 爬虫通过模拟浏览器行为自动化抓取网络数据,涉及 HTTP 请求、HTML 解析、数据清洗、存储等多个环节。开发爬虫时需要应对反爬虫机制,并遵守相关法律法规,确保抓取行为的合法性和道德性。

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

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

相关文章

Discord:报错:A fatal Javascript error occured(解决办法)

按 Windows 键 R 并输入 %appdata% 选择 discord 文件夹并将其删除。 再次按 Windows 键 R 并输入 %LocalAppData% 选择 discord 文件夹并再次将其删除。 附加: 如果还不行,就通过官网下载吧,这个问题通过epic下载可能会有

TypeScript 第三部分 扩展

1. 声明文件 主要作用: 类型声明:为库或模块提供类型信息。全局声明:为全局作用域中的类型和变量提供声明。类型兼容性:确保第三方库或自定义代码的类型正确性。代码提示与检查:在开发环境中提供更好的代码提示和类型…

关于深度学习torch的环境配置问题

已经下好了torch在虚拟环境中,结果在ipynb文件中无法运行 后来在终端直接用python语句编译 发现没有问题 在编辑测试py文件 发现runcode有问题 原来是插件默认base环境 具体操作参考VS Code插件Code Runner使用python虚拟环境_coderunner怎么在虚拟环境中使用-CSD…

11. 异步编程

计算机的核心部分,即执行构成我们程序的各个步骤的部分,称为处理器。我们迄今为止看到的程序都会让处理器忙个不停,直到它们完成工作。像操作数字的循环这样的程序的执行速度几乎完全取决于计算机处理器和内存的速度。但是,许多程…

微服务nginx解析部署使用全流程

目录 1、nginx介绍 1、简介 2、反向代理 3、负载均衡 2、安装nginx 1、下载nginx 2、解压nginx安装包 3、安装nginx​编辑 1、执行configure命令 2、执行make命令 4、启动nginx 1、查找nginx位置并启动 2、常用命令 3、反向代理 1、介绍反向代理配置 1、基础配置…

Windows上面搭建Flutter Android运行环境

Windows 上面搭建 Flutter Android 运 行环境(适用于 Flutter3.7.3之后的版本)。 提示: Flutter3.7.x 之前的版本配置请参考教程,或者参考文档《 Flutter Android 开发环境搭建,适用于 Flutter3.3.10之前的版本》。 …

MySQL-SQL(DDL、DML、DQL、DCL)

一、 MySQL启动: MySQL客户端连接: 二、SQL 1.SQL通用语法 (1) SQL语句可以单行或多行书写,以分号结尾。 (2) SQL语句可以使用空格/缩进来增强语句的可读性。 (3) MySQL数据库的SQL语句不区分大小写,关键字建议使…

宣城自闭症咨询寄宿学校:为家庭提供专业支持

宣城与广州的自闭症教育探索:星贝育园为家庭提供专业支持 在自闭症儿童教育的广阔领域中,寄宿学校作为一种特殊而重要的教育模式,正逐渐展现出其独特的价值和意义。虽然本文标题提及了宣城的自闭症咨询寄宿学校,但我们的焦点将转…

UE4_Niagara基础实例—4、静态网格体表面生成粒子

效果图: 分析:在物体面上生成粒子,改变粒子的不透明度,让粒子收到力,并添加紊乱,类似于水蒸气。 操作步骤: 1、创建个niagara 系统,使用模版 simple sprite burst。简单调节参数。…

【算法】链表:160.相交链表(easy)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法(双指针) 返回结果 算法正确性 时间复杂度 4、代码 1、题目链接 160. 相交链表 - 力扣(LeetCode) 2、题目介绍 ​ 3、解法(…

[C#]C# winform部署yolov11目标检测的onnx模型

yolov11官方框架:https://github.com/ultralytics/ultralytics 【测试环境】 vs2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.2 【效果展示】 【实现部分代码】 using System; using System.Collections.Generic; using System.ComponentModel;…

安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

目录 1 no target device found问题解决办法 2 “INSTALL_FAILED_USER_RESTRICTED”解决办法 使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro 1 no target device found问题解决办法 参考小米手机如何开启usb调试功能? (baidu.com) 1 联接手机…

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在,危害性会很大。但远程文件包含漏洞的利用条件较为苛刻;因此,在web应用系统的功能设计上尽量不要让前端用户直接传变…

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示; 2、不管是正确的输入,还是错误的输入,都只显示两种情况,true or false; 3、在正确的输入下,输入and 1 1/and 1 2发现可以判断; 布尔盲注常用函数&…

【论文笔记】Visual Instruction Tuning

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Visual Instruction Tunin…

关于 JVM 个人 NOTE

目录 1、JVM 的体系结构 2、双亲委派机制 3、堆内存调优 4、关于GC垃圾回收机制 4.1 GC中的复制算法 4.2 GC中的标记清除算法 1、JVM 的体系结构 "堆"中存在垃圾而"栈"中不存在垃圾的原因: 堆(Heap) 用途:堆主要用于存储对象实例和数组。在Java中…

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离 一、微服务雪崩及解决方法 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个…

关于CSS 案例_新闻内容展示

新闻要求 标题:居中加粗发布日期: 右对齐分割线: 提示, 可以使用 hr 标签正文/段落: 左侧缩进插图: 居中显示 展示效果 审核过不了&#xff0c;内容没填大家将就着看吧。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

安卓13设置删除网络和互联网选项 android13隐藏设置删除网络和互联网选项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1修改方法14.2修改方法25.编译6.彩蛋1.前言 有些客户不想让用户修改默认的网络配置,禁止用户进入里面调整网络相关的配置。 2.问题分析 像这个问题,我们有好几种方法去处理,这种需求一般…

【Nacos架构 原理】内核设计之Nacos一致性协议

文章目录 Nacos一致性协议为什么需要一致性协议Nacos选择了Raft&#xff08;强一致性&#xff09;&Distro&#xff08;最终一致性&#xff09;服务发现角度配置管理角度 Nacos自研Distro协议背景设计思想数据初始化数据校验写操作读操作 Nacos一致性协议 为什么需要一致性…