01 Python 网络爬虫:爬虫技术的核心原理

不夸张地说,现在哪怕是初中生,只要花点儿时间、精力稍微按「网络爬虫」的开发步骤学习了解一下,也能把它玩得贼溜。

听起来感觉是很高大上的东西,但实际上并不复杂,也就是使用了某种编程语言按照一定步骤、规则主动通过互联网来抓取某些特定信息的代码程序。

现在常见的就是使用 Python 来实现网络爬虫,后面慢慢讲。

1、基本原理

其它慢点儿再说,咱先来简单了解一下网络爬虫的实现原理。

网络爬虫是指按照一定的规则,自动从互联网上抓取网页信息的程序。网络爬虫是搜索引擎的重要组成部分,它通过不断地访问和抓取网页信息,来建立索引和更新搜索结果。

网络爬虫的实现原理主要包括以下几个步骤,然后我再解释一下:

  1. 发送 HTTP 请求
  2. 接收 HTTP 响应
  3. 解析 HTML 页面
  4. 提取数据
  5. 保存数据

发送 HTTP 请求

网络爬虫首先需要发送 HTTP 请求到网站服务器,请求获取网页信息。HTTP 请求包含了网页的 URL 地址、请求方式、请求头和请求体等信息。

接收 HTTP 响应

网站服务器收到 HTTP 请求后,会返回 HTTP 响应。HTTP 响应包含了网页的 HTML 代码、响应头和响应体等信息。

解析 HTML 页面

网络爬虫接收到 HTTP 响应后,需要解析 HTML 页面,以获取网页中的数据。HTML 页面由 HTML 标签组成,每个 HTML 标签都有自己的属性和值。网络爬虫通过解析 HTML 标签,可以获取网页中的数据,例如文本、图像、链接等。

提取数据

网络爬虫解析HTML页面后,需要提取网页中需要的数据。网络爬虫可以通过正则表达式、XPath 或 CSS 选择器来提取网页中的数据。

保存数据

网络爬虫提取网页中的数据后,需要将数据保存到数据库或文件中。数据可以保存为文本格式、CSV 格式、JSON 格式或XML格式等。

网络爬虫是搜索引擎的重要组成部分,它通过不断地访问和抓取网页信息,来建立索引和更新搜索结果。网络爬虫还被用于其他领域,例如数据采集、内容分析、用户行为分析等。

如果说,咱现在单纯使用 Python 来实现的话,大概就两大步骤:

第一步,使用 Python 的网络模块(urllib2\httplib\requests)来模拟客户端向服务端发送请求,在服务端正常响应之后,服务端即可接收到需要处理的相关网页信息。

第二步,在服务端可以通过一些数据过滤模块(lxml\html.parser\re)将目标信息从网页中过滤出来。

有时候,在反爬虫操作时,可以在 Python 发送的请求中添加相关的 Header 和 Cookies,还可以利用代理、设置间隔访问的时间等等。

在过滤数据的时候,其实很简单,只需要熟悉过滤模块的规则即可。只是说在刚接触的时候,那些模块中的规则很多,不过用得多了自然就记得熟了。

一般来说,熟练使用其中一个模块基本够用了,如果真碰上一个模块无法万一过滤好有效信息,那么就使用多模块协作的方式。

如果你之前也用过,就知道正则表达式(re)模块就已经相当强了,虽然一开始用的时候总感觉很复杂,但在过滤数据这件事儿上相当高效的。

2、爬行策略

在需要使用爬虫的时候,也就是数据很多的时候,如果有很多数据的话,那么就需要注意顺序问题了,也就是说先爬哪一页,然后再爬哪一页,需要弄清楚。

爬行的顺序,有点儿像二叉树,一个是深度优先,一个是广度优先,平时我们采用深度优先的方式比较多一些。

比如,我们先会去访问第一个页面 html01,然后找到第一个数据 data01;然后再去找第二个页面 html02,找第二个数据 data02,以此类推。比如使用 bs 就是这种方式,后面我们会用到,这种方式比较常见。

还有就是采用广度优先算法的,也很简单。就是先去收集所有的网页数据,然后挨个去过滤、获取自己的有效数据。比如使用 PySpider,后面再给大家演示,不过这种方式用得比较少。

如果说,你要去爬大型的网站,或者说是多个网站的话,那就需要根据网站的大小、网页的重要性以及权重等不同因素来分成不同的等级去爬取。

比较流行的爬行策略有 pagerank、opic 等等。

3、识别用户

另外,服务端是如何识别用户身份的呢?主要是 Cookie。在 Python 中,使用的模块是 cookielib。

Cookie 是指网站为了识别用户的身份,进行 session 跟踪而存储在用户本地终端上的数据,当然为了安全,这个数据是加密的。

相关推荐
路由侠内网穿透1 小时前
本地部署开源持续集成和持续部署系统 Woodpecker CI 并实现外部访问
服务器·网络·windows·ci/cd·开源
光储圈1 小时前
光伏安全协议-安全责任协议书8篇
网络·安全
shut up2 小时前
LangChain - 如何使用阿里云百炼平台的Qwen-plus模型构建一个桌面文件查询AI助手 - 超详细
人工智能·python·langchain·智能体
宝贝儿好2 小时前
【python】第五章:python-GUI编程
python·pyqt
时空潮汐3 小时前
神卓 N600:内网穿透需求的高效安全之选
网络·安全·群晖nas·神卓n600
爱倒腾的老唐3 小时前
24、Linux 路由管理
linux·运维·网络
程序员Aries3 小时前
自定义网络协议与序列化/反序列化
linux·网络·c++·网络协议·程序人生
闲人编程3 小时前
从多个数据源(CSV, Excel, SQL)自动整合数据
python·mysql·数据分析·csv·存储·数据源·codecapsule
B站_计算机毕业设计之家3 小时前
推荐系统实战:python新能源汽车智能推荐(两种协同过滤+Django 全栈项目 源码)计算机专业✅
大数据·python·django·汽车·推荐系统·新能源·新能源汽车
茯苓gao3 小时前
Django网站开发记录(一)配置Mniconda,Python虚拟环境,配置Django
后端·python·django