热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爬虫系列(一)网络爬虫简介

最近博主在学习网络爬虫的相关技术(基于Python语言),作为一个学习的总结,打算用博客记录下来,也希望和大家分享一下自己在学习过程中的点点滴滴,话不多
最近博主在学习网络爬虫的相关技术(基于 Python 语言),作为一个学习的总结,打算用博客记录下来,也希望和大家分享一下自己在学习过程中的点点滴滴,话不多说,让我们马上开始吧

写在前面的话 :最近博主在学习网络爬虫的相关技术(基于 Python 语言),作为一个学习的总结,打算用博客记录下来,也希望和大家分享一下自己在学习过程中的点点滴滴,话不多说,让我们马上开始吧

一、爬虫基本简介

什么是网络爬虫,这里先引用一下 百度百科 上的解析:

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本

说起网络爬虫,人们常常会用这样一个比喻:如果把互联网比喻成一张网,那么网络爬虫就可以认为是一个在网上爬来爬去的小虫子,它通过网页的链接地址来寻找网页,通过特定的搜索算法来确定路线,通常从网站的某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有网页都抓取完为止

二、爬虫基本原理

下面的图片很好的展现了一般网络爬虫的基本过程,下面让我们来详细解释一下这张图片的含义吧

爬虫基本原理

1、发送请求

爬虫的第一个步骤就是对起始 URL 发送请求,以获取其返回的响应

值得注意的是,发送请求实质上是指发送请求报文的过程

请求报文 包括以下四个方面:请求行、请求头、空行和请求体

请求报文

但是,往往在使用 Python 相关的网络请求库发送请求时,只需关注某些特殊的部分即可,而非完整的请求报文,下面我们将以粗体的形式标识出我们需要特别关注的部分

(1)请求行

请求行由请求方法、请求 URL 和 HTTP 协议版本 3 个字段组成,字段间使用空格分隔

请求方法:请求方法是指对目标资源的操作方式,常见的有 GET 方法和 POST 方法

  • GET:从指定的资源请求数据,查询字符串包含在 URL 中发送
  • POST:向指定的资源提交要被处理的数据,查询字符串包含在请求体中发送

请求 URL:请求 URL 是指目标网站的统一资源定位符 (Uniform Resource Locator,URL)

③ HTTP 协议版本:HTTP 协议是指通信双方在通信流程和内容格式上共同遵守的标准

(2)请求头

请求头 被认为是请求的配置信息,以下列举出常用的请求头信息(持续补充中)

  • User-Agent:包含发出请求的用户的信息,设置 User-Agent 常用于处理反爬虫
  • COOKIE:包含先前请求的内容,设置 COOKIE 常用于模拟登陆
  • Referer:指示请求的来源,用于可以防止链盗以及恶意请求

(3)空行

空行标志着请求头的结束

(4)请求体

请求体 根据不同的请求方法包含不同的内容

若请求方法为 GET,则此项为空;若请求方法为 POST,则此项为待提交的数据(即表单数据)

2、获取响应

爬虫的第二个步骤就是获取特定 URL 返回的响应,以提取包含在其中的数据

同样的,响应其实是指完整响应报文,它包括四个部分:响应行、响应头、空行和响应体

响应报文

(1)响应行

响应行由 HTTP 协议版本、状态码及其描述组成

① HTTP 协议版本:HTTP 协议是指通信双方在通信流程和内容格式上共同遵守的标准

状态码及其描述

  • 100~199:信息,服务器收到请求,需要请求者继续执行操作
  • 200~299:成功,操作被成功接收并处理
  • 300~399:重定向,需要进一步的操作以完成请求
  • 400~499:客户端错误,请求包含语法错误或无法完成请求
  • 500~599:服务器错误,服务器在处理请求的过程中发生错误

(2)响应头

响应头 用于描述服务器和数据的基本信息,以下列举出常用的响应头信息(持续补充中)

  • Set-COOKIE:设置浏览器 COOKIE,以后当浏览器访问符合条件的 URL 时,会自动带上该 Cooike

(3)空行

空行标志着响应头的结束

(4)响应体

响应体 就是网站返回的数据,在下一个步骤中我们需要对其进行分析处理

3、解析网页

解析网页实质上需要完成两件事情,一是提取网页上的链接,二是提取网页上的资源

(1)提取链接

提取链接实质上是指获取存在于待解析网页上的其他网页的链接

网络爬虫需要给这些链接发送请求,如此循环,直至把特定网站全部抓取完毕为止

(2)提取资源

提取数据则是爬虫的目的,常见的数据类型如下:

  • 文本:HTML,JSON 等
  • 图片:JPG,GIF,PNG 等
  • 视频:MPEG-1、MPEG-2 和 MPEG4,AVI 等

最终,我们可以对所获得的资源作进一步的处理,从而提取出有价值的信息

【爬虫系列相关文章】

  • 爬虫系列(一) 网络爬虫简介

  • 爬虫系列(二) Chrome抓包分析

  • 爬虫系列(三) urllib的基本使用

  • 爬虫系列(四) 用urllib实现英语翻译

  • 爬虫系列(五) re的基本使用

  • 爬虫系列(六) 用urllib和re爬取百度贴吧

  • 爬虫系列(七) requests的基本使用

  • 爬虫系列(八) 用requests实现天气查询

  • 爬虫系列(九) xpath的基本使用

  • 爬虫系列(十) 用requests和xpath爬取豆瓣电影

  • 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论

  • 爬虫系列(十二) selenium的基本使用

  • 爬虫系列(十三) 用selenium爬取京东商品


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
author-avatar
fuck__镇豪_152
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有