《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

本节书摘来自华章计算机《Python爬虫开发与项目实战》一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

第3章 初识网络爬虫

  从本章开始,将正式涉及Python爬虫的开发。本章主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以便具备编写HTTP网络程序的能力。

3.1 网络爬虫概述

  本节正式进入Python爬虫开发的专题,接下来从网络爬虫的概念、用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解。
3.1.1 网络爬虫及其应用
  随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战,网络爬虫应运而生。网络爬虫(又被称为网页蜘蛛、网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。下面通过图3-1展示一下网络爬虫在互联网中起到的作用:
  网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。
  搜索引擎(Search Engine),例如传统的通用搜索引擎baidu、Yahoo和Google等,是一种大型复杂的网络爬虫,属于通用性网络爬虫的范畴。但是通用性搜索引擎存在着一定的局限性:
  1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
screenshot

  2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
  3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
  4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
  为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。
  聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择地访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
  说完了聚焦爬虫,接下来再说一下增量式网络爬虫。增量式网络爬虫是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。例如:想获取赶集网的招聘信息,以前爬取过的数据没有必要重复爬取,只需要获取更新的招聘数据,这时候就要用到增量式爬虫。
  最后说一下深层网络爬虫。Web页面按存在方式可以分为表层网页和深层网页。表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的Web页面。深层网络是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。例如用户登录或者注册才能访问的页面。可以想象这样一个场景:爬取贴吧或者论坛中的数据,必须在用户登录后,有权限的情况下才能获取完整的数据。
  本书除了通用性爬虫不会涉及之外,聚焦爬虫、增量式爬虫和深层网络爬虫的具体运用都会进行讲解。下面展示一下网络爬虫实际运用的一些场景:
  1)常见的BT网站,通过爬取互联网的DHT网络中分享的BT种子信息,提供对外搜索服务。如图3-2所示。
screenshot

  2)一些云盘搜索网站,通过爬取用户共享出来的云盘文件数据,对文件数据进行分类划分,从而提供对外搜索服务。如图3-3所示。
screenshot

3.1.2 网络爬虫结构
  下面用一个通用的网络爬虫结构来说明网络爬虫的基本工作流程,如图3-4所示。
screenshot

  网络爬虫的基本工作流程如下:
  1)首先选取一部分精心挑选的种子URL。
  2)将这些URL放入待抓取URL队列。
  3)从待抓取URL队列中读取待抓取队列的URL,解析DNS,并且得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。
  4)分析已抓取URL队列中的URL,从已下载的网页数据中分析出其他URL,并和已抓取的URL进行比较去重,最后将去重过的URL放入待抓取URL队列,从而进入下一个循环。
  这便是一个基本的通用网络爬虫框架及其工作流程,在之后的章节我们会用Python实现这种网络爬虫结构。

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

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

相关文章

【python】解决:TypeError: can't send non-None value to a just-started generator

在一个生成器函数未启动之前,是不能传递数值进去。必须先传递一个None进去或者调用一次next(g)方法,才能进行传值操作 def product(c):# c.send(None)for i in range(5):print("生产者产生数据%d"%i)r c.send(str(i))print("消费者消费了…

Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全

Vi简介 Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序。Vi不是排版程序,只是一个纯粹的文本编辑程序。Vi是全屏幕文本编辑器,它没有菜单,只有命令。Vi不是基于窗口的,所以,这个多用途编辑程序可以用于在任何…

windows环境下,如何在Pycharm下安装TensorFlow环境

文章目录目录前言:1.安装Anaconda2.安装Tensorflow3.其他问题4.在pycharm中使用tensorflow目录 前言: 最近由于工作需要要使用TensorFlow,所以只能狂补相关的知识。本来博主打算在Ubantu上玩,但是由于一些原因还是放弃了这个想法…

python面向对象实现简易银行管理员页面系统【导入自定义模块】

main.py 人 类名:Person 属性:姓名 身份证号 电话 卡 行为:卡 类名:Card 属性:卡号 密码 余额 行为:银行 类名:Bank 属性:用户列表 提款机提款机 类名:ATM 属性&#xf…

[转] dpkg-deb命令

点击此处阅读原文 软件包管理 dpkg-deb命令是Debian Linux下的软件包管理工具,它可以对软件包执行打包和解包操作以及提供软件包信息。 语法dpkg-deb(选项)(参数) 选项-c:显示软件包中的文件列表; -e:将主控信息解压;…

《Effective Debugging:软件和系统调试的66个有效方法》一第5条:在能够正常运作的系统与发生故障的系统之间寻找差别...

本节书摘来自华章出版社《Effective Debugging:软件和系统调试的66个有效方法》一书中的第1章,第1.5节,作[希]迪欧米迪斯斯宾奈里斯(Diomidis Spinellis),更多章节内容可以访问云栖社…

如何安装多个Python版本以及在Pycharm中切换Python版本

目录前言: 首先要切换不同的版本,你必须先下载不同的Python版本,整个步骤如下所示:1、下载Python2.7x和Python3.5x版本2、安装Python2.7x和Python3.5x版本3、配置环境变量,分别添加如下至path路径4、只修改Python27&am…

【python】逻辑运算符总结

# 逻辑运算符 &#xff1a;构造复杂条件 # 优先级 not > and > or # 逻辑与 and 并且、同时 import random# a random.randint(1,5) # if a > 1 and a < 3_流程控制: # print("true") # else: # print("false") # 可以转换为假&#…

C#中out和ref之间的区别【转】

首先&#xff1a;两者都是按地址传递的&#xff0c;使用后都将改变原来参数的数值。 其次&#xff1a;ref可以把参数的数值传递进函数&#xff0c;但是out是要把参数清空&#xff0c;就是说你无法把一个数值从out传递进去的&#xff0c;out进去后&#xff0c;参数的数值为空&am…

如何打开.ipynb文件

最近碰到文件名后缀为.ipynb文件&#xff0c;起初没太在意这种文件格式&#xff0c;用Notepad打开之后看到也是类似于JSON格式的信息&#xff0c;以为也是为其他的一些文件服务的&#xff08;类似于配置一些HTML文件的配置文件&#xff09;。但是后来才发现这也是一种文本表示形…

《CCNP TSHOOT 300-135认证考试指南》——2.9节凭记忆完成表格和列表

本节书摘来自异步社区《CCNP TSHOOT 300-135认证考试指南》一书中的第2章&#xff0c;第2.9节凭记忆完成表格和列表&#xff0c;作者 【加】Raymond Lacoste , 【美】Kevin Wallace&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.9 凭记忆完成表格和列表CC…

将f2fs文件系统到磁盘

1 用git下载f2fs文件系统tools的源代码。下载地址如下&#xff1a;http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git 具体的操作如下&#xff1a;git clone git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git 通过以…

【python】list append()和extend()区别

list append() ---》添加一个对象整体 extend() ----》添加迭代的对象 append() 添加单一元素在末尾 my_list [geeks, for] my_list.append(geeks) print(my_list) output: [geeks, for, geeks]添加一个list后&#xff0c;也是只添加一个list对象 my_list [geeks, for…

玩Python遇到的问题一二三及解决办法

文章目录问题一&#xff1a;python 2.7版本解决TypeError: encoding is an invalid keyword argument for this function。问题二&#xff1a;python读取文件时提示"UnicodeDecodeError: gbk codec cant decode byte 0x80 in position 205: illegal multibyte sequence&qu…

《MATLAB图像处理超级学习手册》导读

前言 MATLAB图像处理超级学习手册图像是人类获取信息的重要来源。当今的信息化社会&#xff0c;对图像处理和图像分析的要求越来越高&#xff0c;现有的图像软件由于采购成本和功能的限制&#xff0c;已经不能完全满足专业人士的需要&#xff0c;这时就需要专业人士来编写自己的…

【python】SOCK_STREAM和SOCK_DGRAM两种类型的区别【转】

sock_stream 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET&#xff0c;多用于资料(如文件)传送。 sock_dgram 是无保障的面向消息的socket &#xff0c; 主要用于在网络上发广播信息。 SOCK_STREAM是基于TCP的&#xff0c;数据传输比较有保障。SOCK_DGRAM是基于U…

JavaScript将字符串中的每一个单词的第一个字母变为大写其余均为小写

要求&#xff1a; 确保字符串的每个单词首字母都大写&#xff0c;其余部分小写。 这里我自己写了两种方法&#xff0c;或者说是一种方法&#xff0c;另一个是该方法的变种。 第一种&#xff1a; function titleCase(str) {var newarr,newarr1[]; newarr str . toLowerCase() .…

聊天机器人的分类及综述

文章目录[toc] 目录前言&#xff1a;1、技术方向2、chatbot的知识框架3、应用的分类4、chatbot的几个challenges5、工业应用综述总结&#xff1a;目录 前言&#xff1a; 最近由于工作需要&#xff0c;要开发一款智能客服&#xff0c;目前正在搞业务咨询模块的功能&#xff0c…

【python】数据结构和算法 + 浅谈单链表与双链表的区别

有这么一句话说“程序数据结构算法”&#xff0c;也有人说“如果把编程比作做菜&#xff0c;那么数据结构就好比食材&#xff08;菜&#xff09;&#xff0c;算法就好比厨艺&#xff08;做菜的技巧&#xff09;”。 当然这是笼统的说法&#xff0c;不过也稍微懂得了数据结构和…

Ironic 安装和配置详解

转自&#xff1a;http://amar266.blogspot.com/2014/12/ironic-installation-and-configuration.html 1.Install Openstack With Neutron 2.Create and delete vm to test the setup 3.Configure existing setup for ironic 3.1.Configure ironic user in keystone # keystone …