网络爬虫基础介绍

什么是爬虫

Web 爬虫,也称为网络蜘蛛或网络机器人,是一种用于自动化访问和抓取网页内容的程序。爬虫通过模拟用户访问网页的行为,从互联网上获取数据,并将其存储或进一步处理。

爬虫的应用场景

  • 搜索引擎索引:如 Google、Bing,构建和更新搜索引擎的网页索引。
  • 数据挖掘和分析:如价格监控、市场研究、新闻聚合等。
  • 内容聚合:如新闻聚合网站、比价网站,从多个来源抓取内容并汇总。
  • 竞争情报:监控竞争对手网站的变化,获取最新的市场动向。

爬虫的类型

1. 通用爬虫(General Web Crawler)

  • 描述:抓取尽可能多的网页,不针对特定的网站或内容。
  • 应用:搜索引擎(如 Googlebot、Bingbot)。
  • 特点:广泛抓取,覆盖整个互联网,遵循网站的 robots.txt 文件。

2. 聚焦爬虫(Focused Crawler)

  • 描述:根据特定主题或关键词抓取相关网页。
  • 应用:研究特定领域的信息、监控特定主题的动态。
  • 特点:目标明确,抓取范围较狭窄,但深入特定领域。

3. 增量爬虫(Incremental Crawler)

  • 描述:只抓取和更新自上次爬取以来发生变化的网页。
  • 应用:保持索引的最新状态,减少重复抓取。
  • 特点:高效更新,节省带宽和资源。

4. 深度爬虫(Deep Web Crawler)

  • 描述:抓取深网内容,包括动态生成的页面、需要表单提交才能访问的内容。
  • 应用:获取非公开网页、数据库内容、需要认证访问的资源。
  • 特点:复杂度高,可能需要模拟用户行为(如登录、表单提交)。

5. 垂直爬虫(Vertical Crawler)

  • 描述:专注于特定行业或领域的网站内容抓取。
  • 应用:电商比价网站、招聘信息聚合、房产信息收集。
  • 特点:聚焦于某一行业,抓取深度较深,内容质量较高。

6. 动态爬虫(Dynamic Crawler)

  • 描述:能够抓取动态生成的内容,通过模拟浏览器行为执行 JavaScript。
  • 应用:抓取现代 Web 应用(如单页应用,SPA)的内容。
  • 特点:复杂度高,需要使用工具如 Selenium、Puppeteer。

爬虫关注的请求头

  • Host:指定请求的目标主机和端口号。例如:Host: www.example.com
  • Content-Type:告诉服务器请求中包含的内容的类型,以便服务器正确解析和处理请求主体。常见的值有 application/json,application/x-www-form-urlencoded,multipart/form-data 等。例如:Content-Type: application/json
  • Connection:决定客户端和服务器之间的网络连接是否保持打开,或者在请求完成后关闭。常见的值有 keep-alive 和 close。例如:Connection: keep-alive
  • Upgrade-Insecure-Requests:用于告知服务器,客户端愿意接收通过 HTTPS 提供的资源,而不是通过 HTTP。例如:Upgrade-Insecure-Requests: 1
  • User-Agent:标识请求的客户端应用程序类型、操作系统、软件版本等。帮助服务器识别请求的客户端,有时服务器会根据 User-Agent 返回不同的内容或进行特定的处理。例如:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
  • Referer:指示请求的来源页面的 URL。用于告诉服务器当前请求来自哪个页面。服务器有时会根据 Referer 进行分析或防止跨站请求伪造(CSRF)攻击。例如:Referer: https://www.example.com/previous-page
  • Cookie:包含客户端存储的所有 cookie 数据。用于在请求中传递与服务器会话相关的数据,比如用户登录状态、首选项等。服务器可以使用这些 cookie 来识别和跟踪用户。例如:Cookie: sessionId=abc123; theme=light
  • Authorization:包含身份验证信息。用于提供凭据,以证明请求用户的身份。常见的值有 Basic(基本认证)和 Bearer(通常用于 JWT 或 OAuth 令牌)。例如:Authorization: Bearer <token>
  • Accept-Language:指定客户端期望接收的语言(如 en-US, zh-CN)。帮助服务器返回本地化的内容。例如:Accept-Language: zh-CN
  • Accept-Encoding:指定客户端可以处理的内容编码(如 gzip, deflate),使用何种压缩方法传输数据以节省带宽。例如:Accept-Encoding: gzip, deflate

爬虫关注的响应头

  • Content-Type:指示响应内容的 MIME 类型,告诉客户端如何解释响应内容。例如,text/html 表示 HTML 文档,application/json 表示 JSON 数据。例如:Content-Type: application/json
  • Content-Length:指示响应内容的字节长度。例如:Content-Length: 348
  • Set-Cookie:用于设置客户端的 cookie,服务器通过此头部向客户端发送 cookie,客户端会在后续请求中携带这些 cookie。例如:Set-Cookie: sessionId=abc123; Path=/; HttpOnly
  • Server:提供服务器相关信息,但过多的详细信息可能会暴露安全风险。例如:Server: Apache/2.4.41 (Ubuntu)
  • Cache-Control:指示缓存策略,控制客户端和中间代理的缓存行为,常见的值包括 no-cache, no-store, max-age=3600。例如:Cache-Control: no-cache
  • Content-Encoding:指示响应内容的编码方式。常见的编码方式有 gzip, deflate, br。例如:Content-Encoding: gzip
  • Location:指示重定向的目标 URL。用于重定向响应,通常与状态码 3xx 一起使用,告知客户端要重定向到的新位置。例如:Location: https://www.example.com/new-page
  • Access-Control-Allow-Origin:控制跨域资源共享(CORS),指定哪些域名可以访问资源。* 表示允许所有域名访问。例如:Access-Control-Allow-Origin: *

爬虫对响应状态码的处理建议

常见状态码

1xx 信息响应(Informational Responses)

  1. 100 Continue
    • 描述:请求已收到,客户端可以继续发送请求体。
    • 应用:适用于较大请求体的分段传输。

2xx 成功响应(Successful Responses)

  1. 200 OK

    • 描述:请求成功,服务器已返回所请求的数据。
    • 应用:抓取成功的页面。
  2. 201 Created

    • 描述:请求成功,并且服务器创建了新的资源。
    • 应用:POST 请求后,资源成功创建时的响应。
  3. 204 No Content

    • 描述:请求成功,但没有内容返回。
    • 应用:DELETE 请求后,资源成功删除时的响应。

3xx 重定向响应(Redirection Responses)

  1. 301 Moved Permanently

    • 描述:请求的资源已永久移动到新 URL。
    • 应用:更新爬虫的 URL 记录,抓取新的地址。
  2. 302 Found

    • 描述:请求的资源临时移动到新 URL。
    • 应用:跟随重定向抓取新地址,但不更新 URL 记录。
  3. 304 Not Modified

    • 描述:请求的资源未修改,可以使用缓存版本。
    • 应用:减少不必要的抓取,使用本地缓存数据。

4xx 客户端错误响应(Client Error Responses)

  1. 400 Bad Request

    • 描述:请求无效,服务器无法处理。
    • 应用:检查请求的构建,修正错误。
  2. 401 Unauthorized

    • 描述:请求需要身份验证。
    • 应用:提供必要的认证信息,如 Token 或 Cookie。
  3. 403 Forbidden

    • 描述:服务器拒绝请求,无权访问资源。
    • 应用:可能需要更改策略或提供认证信息。
  4. 404 Not Found

    • 描述:请求的资源不存在。
    • 应用:记录该 URL,不再尝试抓取。
  5. 429 Too Many Requests

    • 描述:请求频率过高,被服务器限流。
    • 应用:调整抓取频率,遵守网站的请求速率限制。

5xx 服务器错误响应(Server Error Responses)

  1. 500 Internal Server Error

    • 描述:服务器内部错误,无法完成请求。
    • 应用:通常是服务器端问题,可能重试请求。
  2. 502 Bad Gateway

    • 描述:网关或代理服务器从上游服务器接收到无效响应。
    • 应用:可能是暂时性问题,重试请求。
  3. 503 Service Unavailable

    • 描述:服务器目前无法处理请求,通常是暂时性的。
    • 应用:通常由于服务器过载或维护,稍后重试。
  4. 504 Gateway Timeout

    • 描述:网关或代理服务器等待上游服务器响应超时。
    • 应用:可能是暂时性问题,重试请求。
处理建议
  • 成功状态码(2xx):正常处理,提取和存储数据。
  • 重定向状态码(3xx):跟随重定向,确保抓取正确的最终 URL。
  • 客户端错误状态码(4xx):分析和调整请求,避免无效请求。
  • 服务器错误状态码(5xx):适当重试请求,但要设置重试次数上限,防止无限重试。
  • 状态码不是绝对可信的,例如:一些网站为了防止爬虫过度抓取,会故意返回错误的状态码,如 403、404、429、503等。一切以是否从响应中获取到数据为准,network中得到的源码是判断依据,elements中的源码是渲染之后的,不能作为判断依据。

爬虫的法律问题

  • 数据访问权限:

    • 爬虫必须遵守目标网站的使用条款和服务协议。某些网站可能明确禁止自动化访问或数据抓取。
    • 解决方案:确保在合法授权或许可的范围内进行数据访问和抓取。
  • 著作权和数据所有权:

    • 爬虫抓取的内容可能受到版权保护。对于未经许可的数据抓取,可能侵犯原作者的著作权。
    • 解决方案:尊重版权法,仅抓取公开或允许使用的数据,或者获取数据使用许可。
  • 反竞争行为:

    • 爬虫抓取竞争对手的价格信息或商业机密,可能构成不正当竞争或侵犯商业秘密。
    • 解决方案:遵守竞争法规定,避免获取或使用未公开的商业机密信息。
  • 隐私保护:

    • 爬虫抓取的数据可能涉及个人隐私,如用户信息或敏感数据。未经授权地收集和处理这些数据可能违反隐私法规。
    • 解决方案:遵守数据保护法律,确保在合法和透明的条件下处理个人数据。
  • 网络攻击和破坏:

    • 爬虫不得用于未经授权的网络攻击或破坏行为,如对目标网站进行拒绝服务攻击(DDoS)或其他恶意行为。
    • 解决方案:遵守计算机犯罪法,确保使用爬虫技术不会损害他人的网络安全和正常运作。

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

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

相关文章

十五、【机器学习】【监督学习】- 神经网络回归

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

C语言强化-1.数据结构概述

与408的关联&#xff1a;1. 逻辑结构和存储结构在选择题中会有涉及。2. 时间复杂度几乎是每一年大题必考内容&#xff01; 逻辑结构与存储结构 逻辑结构&#xff08;对人友好&#xff09; 集合结构&#xff08;无关系&#xff09;线性结构&#xff08;一对一&#xff09;树形…

Django Q()函数

Q() 函数的作用 在Django中&#xff0c;Q()函数是一个非常有用的工具&#xff0c;主要用于构建复杂的查询。它允许你创建复杂的查询语句&#xff0c;包括AND、OR和NOT逻辑操作。这对于处理复杂的数据库查询特别有用&#xff0c;特别是在你需要组合多个条件或处理复杂的过滤逻辑…

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长&#xff0c;如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS&#xff08;HTTP Live Streaming&#xff09;加密技术作为一种先进的流媒体加密手段&#xff0c;凭借其高效性和安全性&#xff0c;在直播、点播等场景中得到了广泛应…

【Neo4j 】学习笔记:GraphRAG 宣言:为 GenAI 添加知识

GraphRAG 宣言:为 GenAI 添加知识 原文 菲利普拉瑟尔图片 菲利普拉瑟尔 7 月 11 日 阅读时长:22 分钟 我们正在进入 RAG 的“Blue Links”时代 GraphRAG 宣言。 我们即将意识到,要想用 GenAI 做任何有意义的事情,你不能只依赖自回归 LLM来做决定。我知道你在想什么:“RAG …

【C语言】联合体(union)

文章目录 1.联合体的含义2. 联合体的声明3. 联合体大小的计算4. 联合体的特点 1.联合体的含义 联合体也叫做共用体&#xff0c;是指联合体的所有成员共用同一块内存空间。这也就说明了&#xff0c;联合体的大小至少是其成员所占空间的最大值。 2. 联合体的声明 #include<…

【整体介绍】HTML和JS编写多用户VR应用程序的框架

一、Networked-Aframe是什么&#xff1f; 简称NAF&#xff0c;底层基于Mozilla的AFrame框架&#xff0c;用HTML和JS编写多用户VR应用程序的框架。 二、特性 支持 WebRTC 和/或 WebSocket 连接。 语音聊天。音频流让您的用户在应用程序内交谈&#xff08;仅限 WebRTC&#xff…

2024全球和国内最常用的弱密码,有没有你的?

密码管理器NordPass分析了来自公开来源的超过4.3TB 的密码数据&#xff0c;找出了当前为止&#xff08;2024年&#xff09;最常用&#xff08;最脆弱&#xff09;的密码。 这些密码主要有下面这些特征&#xff1a; 简单且常用&#xff0c;万年弱密码&#xff0c;比如123456、a…

数据仓库实践:了解和定义指标

指标分类 指标分类主要分为原子指标、派生指标、衍生指标 原子指标 某一业务事件下的度量&#xff0c;是不可再拆分的值&#xff0c;这些值一般有明确业务含义的名称&#xff0c;如库存数量、人员数量; 度量&#xff1a;在维度建模中&#xff0c;将度量称为事实&#xff0c;…

智慧消防建设方案(完整方案参考PPT)

智慧消防系统建设方案旨在通过物联网、大数据与云计算技术&#xff0c;集成火灾自动报警、智能监控、应急指挥等功能于一体。方案部署智能传感器监测火情&#xff0c;实时数据分析预警&#xff0c;实现火灾早发现、早处置。构建可视化指挥平台&#xff0c;优化应急预案&#xf…

Python中发送邮件的艺术:普通邮件、PDF附件与Markdown附件

用的是qq邮箱,具体获取smtp的password可以看这个文章 获取密码 Python中发送邮件的艺术:普通邮件、PDF附件与Markdown附件 在今天的博客中,我们将探讨如何使用Python的smtplib库来发送电子邮件,包括发送普通文本邮件、携带PDF文件的邮件和附带Markdown文件的邮件。这些功能…

视频号助手获取feedId

1.登陆视频号 2.内容管理-视频 3.视频后分享

Java实习记录 1 ——初入职场

Java实习记录 1 ——初入职场 引言正文收获 引言 在几个月的春招过程中&#xff0c;在完成学校学业的同时&#xff0c;进行投简历、笔试和面试。得益于较为扎实的技术基础&#xff0c;在暑假来临之际&#xff0c;找到了第一份实习工作。目前已入职将近半个月。记录一下实习经历…

码农生涯问题杂记

Linux GCC编译通过&#xff0c;Vistual Studio编译报莫名奇妙错误 Q&#xff1a;工作中需要测试一个JNA程序&#xff0c;想着Windows方便&#xff0c;所以就在Windows进行动态库的编译&#xff0c;然后在编译过程中&#xff0c;对应的代码在Linux系统GCC编译是成功的&#xff…

前端面试题日常练-day94 【Less】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末 在Less中&#xff0c;以下哪个功能用于处理文本换行&#xff1f; a) wrap-text() b) word-wrap() c) text-wrap() d) line-break() Less中的Variables是用来做什么的&#xff1f; a) 控制元素位置 b)…

Git 用法

基本介绍 版本控制工具用处&#xff1a; 备份代码还原协同开发追溯 版本控制工具 1、集中式版本控制工具 版本库是集中存放在中央服务器的&#xff0c;team 里每个人 work 时从中央服务器下载代码&#xff0c;是必须联网才能工作&#xff0c;局域网或互联网。个人修改后然后…

【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc

已解决&#xff1a;WslRegisterDistribution failed with error: 0x800701bc 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十一章 文件IO和标准IO

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

MySQL_基础知识

目录 一、数据库 二、数据库操作 2.1 显示当前数据库 2.2 创建数据库 2.3 删除数据库 2.4 使用数据库 三、数据类型 3.1 数值类型 3.2 字符串类型 3.3 日期类型 四、表的操作 4.1 创建表 4.2 显示当前库中的表 4.3 查看表结构 4.4 删除表 总结 一、数据库 数据…

WHAT - Tailwind CSS 的灵活布局(Flex Grid)

目录 Flexbox 布局1. 启用 Flexbox2. 主轴方向3. 交叉轴对齐方式4. 主轴对齐方式5. 包裹子元素的方式6. 子元素 Flex 属性综合示例 Grid 布局1. 启用 Grid2. 定义列数3. 列和行的定义4. 列和行的间隔5. 行和列的大小6. 位置和对齐综合示例 总结 查看 Tailwind CSS 的官方文档&a…