python爬虫 - 初识爬虫

news2024/11/25 4:41:45

 🌈个人主页: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.coloradmin.cn/o/2187999.html

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

相关文章

软件工程-数据流图

数据流图(Data Flow Diagram,DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。 数据流图的设计原则 数据守恒原则,对于任何一个加工来说,其所有输出数据流中的数据必须能从该加工的输入数据流中…

移动应用的界面配置-手机银行APP

设置登录界面为线性布局,组件垂直居中排列设置主页为滚动模式,包括布局、添加背景图片设置按钮样式,包括形状、边框线的宽度和颜色 设置登录界面 设置界面为线性布局,组件垂直居中排列 --android:gravity"center_vertical…

前缀调整——优化连续提示以生成文本

人工智能咨询培训老师叶梓 转载标明出处 大模型微调需要更新并存储模型的所有参数,这不仅增加了存储成本,也使得模型的部署变得复杂。为了解决这一问题,斯坦福大学的Xiang Lisa Li和Percy Liang提出了一种名为“前缀调整”(Prefi…

YOLO11改进|注意力机制篇|引入HAT超分辨率重建模块

目录 一、HAttention注意力机制1.1HAttention注意力介绍1.2HAT核心代码 二、添加HAT注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、HAttention注意力机制 1.1HAttention注意力介绍 HAT模型 通过结合卷积特征提取与多尺度注意…

第 22 章 工作面试老大难——锁

22.1 解决并发事务带来问题的两种基本方式 当一个事务想对一条记录做改动时,首先会看看内存中有没有与这条记录关联的锁结构,当没有的时候就会在内存中生成一个锁结构与之关联。 trx 信息:代表这个锁结构是哪个事务生成的。is_waiting&…

【SpringBoot详细教程】-10-SpringBoot整合swagger【持续更新】

🌿 Swagger2构建Restful API 文档 🍁 Swagger简介 由于SpringBoot能够快速开发、便捷部署等特性,相信有很⼤⼀部分SpringBoot的⽤户会⽤来构建 RESTful API。⽽我们构建RESTfulAPI的⽬的通常都是由于多终端的原因,这些终端会共⽤…

[Python学习日记-37] Python 中的内置函数(下)

简介 在 Python 中有很多内置函数,例如len(),这些函数是Python解释器自带的,可以直接使用。本篇将介绍 O-Z 的内置函数,下图是官方给出的所有 Python 解释器自带的函数 内置函数官方详解:Built-in Functions — Python…

新160个crackme - 073-abexcrackme3

运行分析 需要破解keyfile PE分析 疑似C程序,32位,EP Section是CODE,猜测无壳 静态分析&动态调试 ida搜索字符串,进入函数 call analysis failed,无法查看伪代码 找到上面提示的地址401088,发现是个Exi…

鼓组编写:SsdSample鼓映射 GM Map 自动保存 互换midi位置 风格模板 逻辑编辑器

SsdSample音源的键位映射 方便编写鼓的技巧 可以这样去设置键位关系的面板和钢琴卷帘窗的面板,方便去写鼓。 可以先按GM的midi标准去写鼓,然后比对下鼓的键位映射的关系,去调整鼓。 可以边看自己发b站等处的图文笔记,然后边用电…

订阅ROS2中相机的相关话题并保存RGB、深度和点云图

系统:Ubuntu22.04 ROS2版本:ROS2 humble 1.订阅ROS2中相机的相关话题并保存RGB图、深度图和点云图 ros2 topic list/stellar_1/rgb/image_raw /camera/depth/image_raw /stellar_1/points2CMakeLists.txt cmake_minimum_required(VERSION 3.15) projec…

Deathnote解题过程

主机扫描,发现192.168.1.194 arp-scan -l 端口扫描,发现80和22端口 nmap -sS 192.168.1.194 访问80端口发现自动跳转到http://deathnote.vuln/wordpress添加绑定地址就可以访问了 vim /etc/hosts 192.168.1.194 deathnote.vuln 访问发现并没有什么东西…

IPsec自动方式

文章目录 实验要求实验配置 实验要求 配置 IPsec VPN 采用自动方式同时要满足上网和VPN两种需求使用NAT进行地址映射认证方法和加密算法自行配置采用安全的方法 实验配置 R1: #基本配置 sy sy R1 dhcp enable acl 3001 rule 1 deny ip des 192.168.3.0 0.0.0.255 …

【Python】解密用户代理:使用 Python User Agents 库探索浏览器和设备信息

Python User Agents 是一个专为解析 User Agent 字符串而设计的 Python 库。它能够轻松识别访问设备的类型(如移动设备、桌面设备或平板),并获取设备、浏览器、操作系统等详细信息。借助它,开发者可以更好地了解访问用户的设备属性…

SSM人才信息招聘系统-计算机毕业设计源码28084

摘要 本研究旨在基于Java和SSM框架设计并实现一个人才信息招聘系统,旨在提升招聘流程的效率和精准度。通过深入研究Java和SSM框架在Web应用开发中的应用,结合人才招聘领域的需求,构建了一个功能完善、稳定高效的招聘系统。利用SSM框架的优势&…

如何使用ssm实现政务大厅管理系统+vue

TOC ssm761政务大厅管理系统vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是…

Qt QWidget控件

目录 一、概述 二、Qwidget常用属性及函数介绍 2.1 enable 2.2 geometry 2.3 windowTitle 2.4 windowIcon 2.5 cursor 2.6 font 设置字体样式 2.7 toolTip 2.8 focusPolicy焦点策略 2.9 styleSheet 一、概述 widget翻译而来就是小控件,小部件。…

Linux shell编程学习笔记85:fold命令——让文件瘦身塑形显示

0 引言 我们使用的电脑屏幕有宽有窄,我们有时候希望文件能按照我们的屏幕宽度来调整和匹配,这时我们可以使用fold命令。 1 fold命令 的帮助信息、功能、命令格式、选项和参数说明 1.1 fold 命令 的帮助信息 我们可以输入命令 fold--help 来查看fold …

Spring Boot实现新闻个性化推荐

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

大模型训练环境搭建

硬件资源说明 本教程基于GPU 3090的服务器 资源类型 型号 核心指标 CPU Intel(R) Xeon(R) Bronze 3204 CPU 1.90GHz 12核 内存 / 125Gi GPU NVIDIA GeForce RTX 3090 24G显存 注意:接下来的部分命令需要使用科学上网,需要事先配置好。 安…

基于SpringBoot+Vue的摄影社团管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…