当前位置: 首页 > news >正文

【Python爬虫】01-Python爬虫概述

文章目录

    • 1.概述
    • 2. 分类
      • 2.1 按照功能和用途分类
        • 2.1.1 通用爬虫
        • 2.1.2 聚焦爬虫
        • 2.1.3 增量爬虫
        • 2.1.4 深层爬虫
      • 2.2 按照实现技术分类
        • 2.2.1 基于请求 - 响应模式的爬虫
        • 2.2.2 基于浏览器自动化的爬虫
        • 2.2.3 分布式爬虫
    • 3. 协议
      • 3.1 定义与核心作用
      • 3.2 协议的具体内容
        • 3.2.1 文件存放位置
        • 3.2.2 基本语法规则
        • 3.2.3 示例解析
      • 3.2 实际应用中的要点
        • 3.2.1 爬虫如何遵守协议
        • 3.2.2 常见的 robots.txt 配置模式
      • 3.3 法律与道德层面的考量

1.概述

网络爬虫(Web Crawler),也叫网络蜘蛛,是一种自动抓取互联网上信息的程序。

在 Python 里,爬虫能够按照我们设定的规则,自动访问网页并提取所需的数据。
例如,我们可以用爬虫从新闻网站抓取新闻标题和内容,或者从电商网站抓取商品信息等。

2. 分类

2.1 按照功能和用途分类

2.1.1 通用爬虫

常见的就是搜索引擎,无差别的收集数据、存储,提取关键字,构建索引库,给用户提供搜索接口。

  • 定义:这类爬虫的目标是尽可能全面地抓取互联网上的网页。它们会从一些种子网址开始,不断地发现和抓取新的网页,构建起一个庞大的网页数据库。

  • 特点:抓取范围广泛,涵盖了互联网上各个领域的网页。像搜索引擎(如百度、谷歌)背后的爬虫就是典型的通用爬虫,它们会抓取数以亿计的网页,以便为用户提供全面的搜索结果。

  • 应用场景:主要用于搜索引擎的网页索引构建、互联网信息的大规模收集和分析等。

爬取流程

  1. 初始一批URL,将这些URL放到待爬取队列
  2. 从队列取出这些URL,通过DNS解析IP,对IP对应的站点下载HTML页面,保存到本地服务器中,爬取完的
    URL放到已爬取队列。
  3. 分析这些网页内容,找出网页里面的其他关心的URL链接,继续执行第2步,直到爬取条件结束。

搜索引擎如何获取一个新网站的URL

  • 新网站主动提交给搜索引擎
  • 通过其它网站页面中设置的外链
  • 搜索引擎和DNS服务商合作,获取最新收录的网站
2.1.2 聚焦爬虫
  • 定义:聚焦爬虫也被叫做主题爬虫,它会针对特定的主题或领域进行网页抓取。只关注与设定主题相关的网页,忽略其他不相关的内容。

  • 特点:具有很强的针对性,能够精准地抓取用户所需的特定主题信息。比如,要研究汽车行业的动态,聚焦爬虫就会只抓取汽车相关的新闻、评测、论坛等网页。

  • 应用场景:常用于行业研究、市场调研、竞品分析等领域,帮助用户快速获取特定主题的信息。

2.1.3 增量爬虫
  • 定义:增量爬虫的主要任务是只抓取网页中发生变化的部分或者新产生的网页。它会记录之前抓取过的网页状态,下次抓取时只处理有更新的内容。

  • 特点:能够有效减少重复抓取,提高抓取效率,节省服务器资源和网络带宽。例如,新闻网站每天都会有新的文章发布,同时旧文章也可能会有更新,增量爬虫可以只抓取新文章和有更新的旧文章。

  • 应用场景:适用于需要实时跟踪网页更新的场景,如新闻资讯网站、电商网站的商品信息更新等。

2.1.4 深层爬虫
  • 定义:深层爬虫专注于抓取那些需要用户交互(如填写表单、登录等)才能访问到的深层网页内容。普通爬虫可能只能抓取到网站的表层页面,而深层爬虫可以深入到网站的内部,获取更有价值的信息。

  • 特点:需要处理复杂的用户交互逻辑,如模拟登录、处理验证码等。例如,有些论坛的帖子需要用户登录后才能查看,深层爬虫就可以模拟用户登录,然后抓取这些帖子的内容。

  • 应用场景:常用于获取一些需要授权才能访问的信息,如会员专属内容、企业内部知识库等。

2.2 按照实现技术分类

2.2.1 基于请求 - 响应模式的爬虫
  • 定义:这种爬虫通过向目标网站发送 HTTP 请求,然后接收服务器返回的响应来获取网页内容。常见的 Python 库如 requests 就可以用来实现基于请求 - 响应模式的爬虫。

  • 特点:实现简单,适用于大多数静态网页的抓取。例如,要抓取一个新闻网站的文章列表,只需要向该网站的文章列表页面发送 GET 请求,然后解析响应内容即可。

  • 应用场景:广泛应用于各种静态网页的信息采集,如博客文章、商品列表等。

2.2.2 基于浏览器自动化的爬虫
  • 定义:借助浏览器自动化工具(如 Selenium、Puppeteer 等)来模拟浏览器的行为,实现网页的抓取。这种爬虫可以处理动态网页,即那些需要 JavaScript 执行才能加载出完整内容的网页。

  • 特点:能够处理复杂的动态内容,如 AJAX 加载、页面滚动加载等。例如,有些电商网站的商品列表是通过 AJAX 动态加载的,使用基于浏览器自动化的爬虫就可以模拟用户滚动页面,加载出所有的商品信息。

  • 应用场景:适用于抓取动态网页的内容,如社交网站的动态信息、实时数据展示页面等。

2.2.3 分布式爬虫
  • 定义:分布式爬虫会将爬取任务分配到多个节点(服务器)上并行执行,从而提高爬取效率和处理能力。它通过协调多个节点之间的工作,实现大规模网页的快速抓取。

  • 特点:具有高并发、高性能的特点,能够处理海量的网页抓取任务。例如,要抓取整个电商平台的所有商品信息,单台服务器可能需要很长时间才能完成,而分布式爬虫可以同时使用多台服务器进行抓取,大大缩短了时间。

  • 应用场景:适用于需要大规模数据采集的场景,如搜索引擎的网页抓取、大数据分析的数据收集等。

3. 协议

在网络爬虫的世界里,爬虫协议是一组至关重要的规则和约定,它不仅能确保爬虫程序合法、道德地运行,还能维护互联网的正常秩序。

3.1 定义与核心作用

爬虫协议,其正式名称为网络爬虫排除标准(Robots Exclusion Protocol),简称为 robots.txt。

它是一种基于文本的协议,网站通过这个协议向网络爬虫传达哪些页面可以被抓取,哪些不可以。其核心目的有两个:
一是保护网站敏感信息不被随意获取;
二是避免爬虫过度消耗网站资源,影响正常服务。

3.2 协议的具体内容

3.2.1 文件存放位置

每个网站的 robots.txt 文件都存放在网站的根目录下,访问路径通常为:https://example.com/robots.txt。例如,百度的 robots.txt 文件地址是 https://www.baidu.com/robots.txt。

3.2.2 基本语法规则
  • User - agent:用于指定规则所适用的爬虫名称。当设置为 * 时,表示该规则对所有爬虫都有效。
  • Disallow:用于指定不允许爬虫访问的路径。若该字段为空,则表示允许爬虫访问所有路径。
  • Allow:用于指定允许爬虫访问的路径,它可以对 Disallow 规则进行补充和细化。
  • Crawl - delay:用于设置爬虫访问该网站的间隔时间,单位是秒。不过需要注意的是,这个字段并非所有爬虫都会遵守。
3.2.3 示例解析

下面是一个 robots.txt 文件的示例:

User - agent: *
Disallow: /admin/
Disallow: /private/
Allow: /public/User - agent: BadBot
Disallow: /

对这个示例的解释如下:

  • 对于所有爬虫(User - agent: *):禁止访问 /admin/ 和 /private/ 目录下的页面,但允许访问 /public/ 目录下的页面。
  • 对于名为 BadBot 的爬虫:禁止其访问网站的任何页面。

3.2 实际应用中的要点

3.2.1 爬虫如何遵守协议

在编写爬虫程序时,应该在开始抓取之前先检查目标网站的 robots.txt 文件。
可以通过发送 HTTP 请求来获取该文件,然后解析其中的规则,确保爬虫只访问被允许的页面
以下是一个使用 Python 实现的示例:

import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoupdef check_robots(url):# 构建 robots.txt 的 URLrobots_url = urljoin(url, '/robots.txt')try:response = requests.get(robots_url)if response.status_code == 200:return response.textelse:# 如果获取失败,默认允许访问return ''except requests.exceptions.RequestException:# 如果发生异常,默认允许访问return ''def is_path_allowed(robots_txt, path, user_agent='*'):# 解析 robots.txt 文件,判断路径是否允许访问# 这里需要实现具体的解析逻辑# 简化示例,实际实现需要考虑更多复杂情况return True# 使用示例
url = 'https://www.example.com'
robots_txt = check_robots(url)
if is_path_allowed(robots_txt, '/public/page'):# 可以访问该路径response = requests.get(urljoin(url, '/public/page'))
3.2.2 常见的 robots.txt 配置模式
  • 完全开放
    这种配置表示允许所有爬虫访问网站的所有页面
User - agent: *
Disallow:
  • 完全禁止
    这种配置则表示禁止所有爬虫访问网站的任何页面。
User - agent: *
Disallow: /
  • 部分限制
    这种配置允许爬虫访问网站的大部分页面,但禁止访问 /search/ 和 /login/ 目录下的页面。
User - agent: *
Disallow: /search/
Disallow: /login/

3.3 法律与道德层面的考量

1. 法律约束
虽然 robots.txt 本身并没有直接的法律强制力,但在许多国家和地区,未经授权访问受保护的网络资源可能会违反相关法律,比如《计算机信息系统安全保护条例》《网络安全法》等。因此,遵守 robots.txt 不仅是一种技术规范,更是一种法律要求。

2. 道德责任
爬虫开发者还需要承担一定的道德责任,具体包括:

  • 避免过度抓取:要合理控制爬虫的访问频率,避免对目标网站的正常运行造成影响。
  • 尊重隐私信息:不应该抓取用户的敏感信息,如个人联系方式、账号密码等。
  • 不传播非法内容:即使爬虫能够访问某些内容,也不应该传播其中的非法信息。

协议的局限性
需要注意的是,robots.txt 协议存在一定的局限性,它主要依靠爬虫开发者的自觉遵守,并没有办法真正阻止恶意爬虫的访问。对于那些不遵守协议的爬虫,网站还需要结合其他技术手段(如 IP 封禁、验证码等)来进行防范。

http://www.xdnf.cn/news/413443.html

相关文章:

  • js相关内容
  • 实数完备性定理互证1
  • 在选择合适的实验室铁地板和铸铁试验平板,帮分析​
  • ApiPost工具详细介绍及使用教程
  • Java中String字符串
  • 【蓝桥杯嵌入式】【模块】二、LED相关配置及代码模板
  • 关于输入法重码率的计算
  • web 自动化之 Unittest 应用:测试报告装饰器断言
  • 基于大模型研究技术方案清单
  • 【markdown】介绍如何在markdown中绘制流程图
  • 在嵌入式调试中IAR提示Fatal error: CPU did not power up Session aborted!怎么回事?怎么解决?
  • C++中类中const知识应用详解
  • PyCharm历史版本下载说明
  • Java大师成长计划之第20天:Spring Framework基础
  • Qt/C++面试【速通笔记九】—视图框架机制
  • EHS 安全管理有效落地,五步实施方法解析
  • 基于SpringBoot的博客系统测试报告
  • slackel系统详解
  • MACH-ETH:汽车网络接口的卓越之选
  • steam OS详细讲解
  • yolov5s.pt这类的后续是pt的文件用什么软件可以打开看
  • STM32F103_LL库+寄存器学习笔记12.1 - 串口DMA高效收发实战:引入ringbuffer结构
  • STM32实现循环队列
  • 系统架构-通信系统架构设计
  • 如何理解“数组也是对象“——Java中的数组
  • old kali网站下载链接爬取-Kali linux 全部版本镜像下载--Index of /kali-images
  • 基于STM32、HAL库的DPS368XTSA1气压传感器 驱动程序设计
  • [Windows] Honeyview V5.53
  • 深度解析Crawl4AI:面向大模型的新一代智能爬虫
  • 2025系统架构师考试押题总结