精通Python网络爬虫:核心技术、框架与项目实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-19 00:51:40

点击下载

作者:韦玮

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精通Python网络爬虫:核心技术、框架与项目实战

精通Python网络爬虫:核心技术、框架与项目实战试读:

版权信息书名:精通Python网络爬虫:核心技术、框架与项目实战作者:韦玮排版:辛萌哒出版社:工业出版社出版时间:2017-02-01ISBN:9787111562085本书由北京华章图文信息有限公司授权北京当当科文电子商务有限公司制作与发行。— · 版权所有 侵权必究 · —前言为什么写这本书

网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中。在搜索引擎中,主要使用通用网络爬虫对网页进行爬取及存储。

随着大数据时代的到来,我们经常需要在海量数据的互联网环境中搜集一些特定的数据并对其进行分析,我们可以使用网络爬虫对这些特定的数据进行爬取,并对一些无关的数据进行过滤,将目标数据筛选出来。对特定的数据进行爬取的爬虫,我们将其称为聚焦网络爬虫。在大数据时代,聚焦网络爬虫的应用需求越来越大。

目前在国内Python网络爬虫的书籍基本上都是从国外引进翻译的,国内的本版书籍屈指可数,故而我跟华章的副总编杨福川策划了这本书。本书的撰写过程中各方面的参考资料非常少,因此完成本书所花费的精力相对来说是非常大的。

本书从系统化的视角,为那些想学习Python网络爬虫或者正在研究Python网络爬虫的朋友们提供了一个全面的参考,让读者可以系统地学习Python网络爬虫的方方面面,在理解并掌握了本书的实例之后,能够独立编写出自己的Python网络爬虫项目,并且能够胜任Python网络爬虫工程师相关岗位的工作。

同时,本书的另一个目的是,希望可以给大数据或者数据挖掘方向的从业者一定的参考,以帮助这些读者从海量的互联网信息中爬取需要的数据。所谓巧妇难为无米之炊,有了这些数据之后,从事大数据或者数据挖掘方向工作的读者就可以进行后续的分析处理了。

本书的主要内容和特色

本书是一本系统介绍Python网络爬虫的书籍,全书注重实战,涵盖网络爬虫原理、如何手写Python网络爬虫、如何使用Scrapy框架编写网络爬虫项目等关于Python网络爬虫的方方面面。

本书的主要特色如下:

·系统讲解Python网络爬虫的编写方法,体系清晰。

·结合实战,让读者能够从零开始掌握网络爬虫的基本原理,学会编写Python网络爬虫以及Scrapy爬虫项目,从而编写出通用爬虫及聚焦爬虫,并掌握常见网站的爬虫反屏蔽手段。

·有配套免费视频,对于书中的难点,读者可以直接观看作者录制的对应视频,加深理解。

·拥有多个爬虫项目编写案例,比如博客类爬虫项目案例、图片类爬虫项目案例、模拟登录爬虫项目等。除此之外,还有很多不同种类的爬虫案例,可以让大家在理解这些案例之后学会各种类型爬虫的编写方法。

总之,在理解本书内容并掌握书中实例之后,读者将能胜任Python网络爬虫工程师方向的工作并学会各种类型网络爬虫项目的编写。此外,本书对于大数据或数据挖掘方向的从业者也非常有帮助,比如可以利用Python网络爬虫轻松获取所需的数据信息等。

本书面向的读者

·Python网络爬虫初学者

·网络爬虫工程师

·大数据及数据挖掘工程师

·高校计算机专业的学生

·其他对Python或网络爬虫感兴趣的人员

如何阅读本书

本书分为四篇,共计20章。

第一篇为理论基础篇(第1~2章),主要介绍了网络爬虫的基础知识,让大家从零开始对网络爬虫有一个比较清晰的认识。

第二篇为核心技术篇(第3~9章),详细介绍了网络爬虫实现的核心技术,包括网络爬虫的工作原理、如何用Urllib库编写网络爬虫、爬虫的异常处理、正则表达式、爬虫中Cookie的使用、手写糗事百科爬虫、手写链接爬虫、手写微信爬虫、手写多线程爬虫、浏览器伪装技术、Python网络爬虫的定向爬取技术及实例等。学完这一部分内容,读者就可以写出自己的爬虫了。这部分的爬虫编写采用的是一步步纯手写的方式进行的,没有采用框架。

第三篇为框架实现篇(第10~17章),主要详细介绍了如何用框架实现Python网络爬虫项目。使用框架实现Python网络爬虫项目相较于手写方式更加便捷,主要包括Python爬虫框架分类、Scrapy框架在各系统中的安装以及如何避免各种“坑”、如何用Scrapy框架编写爬虫项目、Scrapy框架架构详解、Scrapy的中文输出与存储、在Scrapy中如何使用for循环实现自动网页爬虫、如何通过CrawlSpider实现自动网页爬虫、如何将爬取的内容写进数据库等。其中第12章为基础部分,读者需要着重掌握。

第四篇为项目实战篇(第18~20章),分别讲述了博客类爬虫项目、图片类爬虫项目、模拟登录爬虫项目的编程及实现。其中,也会涉及验证码处理等方面的难点知识,帮助读者通过实际的项目掌握网络爬虫项目的编写。

勘误和支持

由于作者的水平有限,书中难免有一些错误或不准确的地方,恳请各位读者不吝指正。

相关建议各位可以通过微博@韦玮pig或通过QQ公众号a67899或微信公众平台weijc7789(可以直接扫描下方二维码添加)进行反馈,也可以直接向邮箱ceo@iqianyue.com发送邮件,期待能够收到各位读者的意见和建议,欢迎来信。扫描关注QQ公众号扫描关注微信公众号

致谢

感谢机械工业出版社华章公司的副总编杨福川老师与编辑李艺老师,在近一年的时间里,是你们一次次在我遇到困难的时候,给予我鼓励,让我可以坚持写下去。创作一本图书是非常艰苦的,除了技术知识等因素之外,还需要非常大的毅力。特别感谢杨福川在写作过程中对我各方面的支持,尤其是对我毅力的培养。

感谢CSDN、51CTO与极客学院,因为你们,让我在这个领域获得了更多的学员与支持。

感谢恩师何云景教授对我创业方面的帮助,因为有您,我才拥有了一个更好的创业开端及工作环境。

特别致谢

最后,需要特别感谢的是我的女友,因为编写这本书,少了很多陪你的时间,感谢你的不离不弃与理解包容。希望未来可以加倍弥补你那些错过吃的美食和那些错过逛的街道。

同时,也要感谢你帮我完成书稿的校对工作,谢谢你的付出与支持。因为有了你默默的付出,我才能坚定地走下去;因为有了你不断的支持,我才可以安心地往前冲。

感谢爷爷从小对我人生观、价值观的培养,您是一个非常有思想的人。

感谢远方的父母、叔叔、姐姐,那些亲情的陪伴是我最珍贵的财富。

谨以此书献给热爱Python的朋友们!  第一篇理论基础篇

·第1章 什么是网络爬虫

·第2章 网络爬虫技能总览

网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高。此时,我们可以使用网络爬虫对数据信息进行自动采集,比如应用于搜索引擎中对站点进行爬取收录,应用于数据分析与挖掘中对数据进行采集,应用于金融分析中对金融数据进行采集,除此之外,还可以将网络爬虫应用于舆情监测与分析、目标客户数据的收集等各个领域。当然,要学习网络爬虫开发,首先需要认识网络爬虫,在本篇中,我们将带领大家一起认识几种典型的网络爬虫,并了解网络爬虫的各项常见功能。第1章什么是网络爬虫

随着大数据时代的来临,网络爬虫在互联网中的地位将越来越重要。互联网中的数据是海量的,如何自动高效地获取互联网中我们感兴趣的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题而生的。我们感兴趣的信息分为不同的类型:如果只是做搜索引擎,那么感兴趣的信息就是互联网中尽可能多的高质量网页;如果要获取某一垂直领域的数据或者有明确的检索需求,那么感兴趣的信息就是根据我们的检索和需求所定位的这些信息,此时,需要过滤掉一些无用信息。前者我们称为通用网络爬虫,后者我们称为聚焦网络爬虫。1.1 初识网络爬虫

网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则进行,这些规则我们称之为网络爬虫算法。使用Python可以很方便地编写出爬虫程序,进行互联网信息的自动化检索。

搜索引擎离不开爬虫,比如百度搜索引擎的爬虫叫作百度蜘蛛(Baiduspider)。百度蜘蛛每天会在海量的互联网信息中进行爬取,爬取优质信息并收录,当用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关网页,按照一定的排名规则进行排序并将结果展现给用户。在这个过程中,百度蜘蛛起到了至关重要的作用。那么,如何覆盖互联网中更多的优质网页?又如何筛选这些重复的页面?这些都是由百度蜘蛛爬虫的算法决定的。采用不同的算法,爬虫的运行效率会不同,爬取结果也会有所差异。所以,我们在研究爬虫的时候,不仅要了解爬虫如何实现,还需要知道一些常见爬虫的算法,如果有必要,我们还需要自己去制定相应的算法,这些在后面都会为大家详细地讲解,在此,我们仅需要对爬虫的概念有一个基本的了解。

除了百度搜索引擎离不开爬虫以外,其他搜索引擎也离不开爬虫,它们也拥有自己的爬虫。比如360的爬虫叫360Spider,搜狗的爬虫叫Sogouspider,必应的爬虫叫Bingbot。

如果想自己实现一款小型的搜索引擎,我们也可以编写出自己的爬虫去实现,当然,虽然可能在性能或者算法上比不上主流的搜索引擎,但是个性化的程度会非常高,并且也有利于我们更深层次地理解搜索引擎内部的工作原理。

大数据时代也离不开爬虫,比如在进行大数据分析或数据挖掘时,我们可以去一些比较大型的官方站点下载数据源。但这些数据源比较有限,那么如何才能获取更多更高质量的数据源呢?此时,我们可以编写自己的爬虫程序,从互联网中进行数据信息的获取。所以在未来,爬虫的地位会越来越重要。1.2 为什么要学网络爬虫

在上一节中,我们初步认识了网络爬虫,但是为什么要学习网络爬虫呢?要知道,只有清晰地知道我们的学习目的,才能够更好地学习这一项知识,所以在这一节中,我们将会为大家分析一下学习网络爬虫的原因。

当然,不同的人学习爬虫,可能目的有所不同,在此,我们总结了4种常见的学习爬虫的原因。

1)学习爬虫,可以私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理进行更深层次地理解。

有的朋友希望能够深层次地了解搜索引擎的爬虫工作原理,或者希望自己能够开发出一款私人搜索引擎,那么此时,学习爬虫是非常有必要的。简单来说,我们学会了爬虫编写之后,就可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在采集回来的信息中进行检索,即实现了私人的搜索引擎。当然,信息怎么爬取、怎么存储、怎么进行分词、怎么进行相关性计算等,都是需要我们进行设计的,爬虫技术主要解决信息爬取的问题。

2)大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进行采集,去掉很多无关数据。

在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但是这些获得数据的方式,有时很难满足我们对数据的需求,而手动从互联网中去寻找这些数据,则耗费的精力过大。此时就可以利用爬虫技术,自动地从互联网中获取我们感兴趣的数据内容,并将这些数据内容爬取回来,作为我们的数据源,从而进行更深层次的数据分析,并获得更多有价值的信息。

3)对于很多SEO从业者来说,学习爬虫,可以更深层次地理解搜索引擎爬虫的工作原理,从而可以更好地进行搜索引擎优化。

既然是搜索引擎优化,那么就必须要对搜索引擎的工作原理非常清楚,同时也需要掌握搜索引擎爬虫的工作原理,这样在进行搜索引擎优化时,才能知己知彼,百战不殆。

4)从就业的角度来说,爬虫工程师目前来说属于紧缺人才,并且薪资待遇普遍较高,所以,深层次地掌握这门技术,对于就业来说,是非常有利的。

有些朋友学习爬虫可能为了就业或者跳槽。从这个角度来说,爬虫工程师方向是不错的选择之一,因为目前爬虫工程师的需求越来越大,而能够胜任这方面岗位的人员较少,所以属于一个比较紧缺的职业方向,并且随着大数据时代的来临,爬虫技术的应用将越来越广泛,在未来会拥有很好的发展空间。

除了以上为大家总结的4种常见的学习爬虫的原因外,可能你还有一些其他学习爬虫的原因,总之,不管是什么原因,理清自己学习的目的,就可以更好地去研究一门知识技术,并坚持下来。1.3 网络爬虫的组成

接下来,我们将介绍网络爬虫的组成。网络爬虫由控制节点、爬虫节点、资源库构成。

图1-1所示是网络爬虫的控制节点和爬虫节点的结构关系。图1-1 网络爬虫的控制节点和爬虫节点的结构关系

可以看到,网络爬虫中可以有多个控制节点,每个控制节点下可以有多个爬虫节点,控制节点之间可以互相通信,同时,控制节点和其下的各爬虫节点之间也可以进行互相通信,属于同一个控制节点下的各爬虫节点间,亦可以互相通信。

控制节点,也叫作爬虫的中央控制器,主要负责根据URL地址分配线程,并调用爬虫节点进行具体的爬行。

爬虫节点会按照相关的算法,对网页进行具体的爬行,主要包括下载网页以及对网页的文本进行处理,爬行后,会将对应的爬行结果存储到对应的资源库中。1.4 网络爬虫的类型

现在我们已经基本了解了网络爬虫的组成,那么网络爬虫具体有哪些类型呢?

网络爬虫按照实现的技术和结构可以分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫等类型。在实际的网络爬虫中,通常是这几类爬虫的组合体。

首先我们为大家介绍通用网络爬虫(General Purpose Web Crawler)。通用网络爬虫又叫作全网爬虫,顾名思义,通用网络爬虫爬取的目标资源在全互联网中。通用网络爬虫所爬取的目标数据是巨大的,并且爬行的范围也是非常大的,正是由于其爬取的数据是海量数据,故而对于这类爬虫来说,其爬取的性能要求是非常高的。这种网络爬虫主要应用于大型搜索引擎中,有非常高的应用价值。

通用网络爬虫主要由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块等构成。通用网络爬虫在爬行的时候会采取一定的爬行策略,主要有深度优先爬行策略和广度优先爬行策略。具体的爬行策略,我们将在第3章讲解,在此,我们只需要知道通用网络爬虫的基本构成和主要的爬行策略。

聚焦网络爬虫(Focused Crawler)也叫主题网络爬虫,顾名思义,聚焦网络爬虫是按照预先定义好的主题有选择地进行网页爬取的一种爬虫,聚焦网络爬虫不像通用网络爬虫一样将目标资源定位在全互联网中,而是将爬取的目标网页定位在与主题相关的页面中,此时,可以大大节省爬虫爬取时所需的带宽资源和服务器资源。聚焦网络爬虫主要应用在对特定信息的爬取中,主要为某一类特定的人群提供服务。

聚焦网络爬虫主要由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块、内容评价模块、链接评价模块等构成。内容评价模块可以评价内容的重要性,同理,链接评价模块也可以评价出链接的重要性,然后根据链接和内容的重要性,可以确定哪些页面优先访问。聚焦网络爬虫的爬行策略主要有4种,即基于内容评价的爬行策略、基于链接评价的爬行策略、基于增强学习的爬行策略和基于语境图的爬行策略。关于聚焦网络爬虫具体的爬行策略,我们将在1.5节进行详细分析。

增量式网络爬虫(Incremental Web Crawler),所谓增量式,对应着增量式更新。增量式更新指的是在更新的时候只更新改变的地方,而未改变的地方则不更新,所以增量式网络爬虫,在爬取网页的时候,只爬取内容发生变化的网页或者新产生的网页,对于未发生内容变化的网页,则不会爬取。增量式网络爬虫在一定程度上能够保证所爬取的页面,尽可能是新页面。

深层网络爬虫(Deep Web Crawler),可以爬取互联网中的深层页面,在此我们首先需要了解深层页面的概念。

在互联网中,网页按存在方式分类,可以分为表层页面和深层页面。所谓的表层页面,指的是不需要提交表单,使用静态的链接就能够到达的静态页面;而深层页面则隐藏在表单后面,不能通过静态链接直接获取,是需要提交一定的关键词之后才能够获取得到的页面。在互联网中,深层页面的数量往往比表层页面的数量要多很多,故而,我们需要想办法爬取深层页面。

爬取深层页面,需要想办法自动填写好对应表单,所以,深层网络爬虫最重要的部分即为表单填写部分。

深层网络爬虫主要由URL列表、LVS列表(LVS指的是标签/数值集合,即填充表单的数据源)、爬行控制器、解析器、LVS控制器、表单分析器、表单处理器、响应分析器等部分构成。

深层网络爬虫表单的填写有两种类型:第一种是基于领域知识的表单填写,简单来说就是建立一个填写表单的关键词库,在需要填写的时候,根据语义分析选择对应的关键词进行填写;第二种是基于网页结构分析的表单填写,简单来说,这种填写方式一般是领域知识有限的情况下使用,这种方式会根据网页结构进行分析,并自动地进行表单填写。

以上,为大家介绍了网络爬虫中常见的几种类型,希望读者能够对网络爬虫的分类有一个基本的了解。1.5 爬虫扩展——聚焦爬虫

由于聚焦爬虫可以按对应的主题有目的地进行爬取,并且可以节省大量的服务器资源和带宽资源,具有很强的实用性,所以在此,我们将对聚焦爬虫进行详细讲解。图1-2所示为聚焦爬虫运行的流程,熟悉该流程后,我们可以更清晰地知道聚焦爬虫的工作原理和过程。

首先,聚焦爬虫拥有一个控制中心,该控制中心负责对整个爬虫系统进行管理和监控,主要包括控制用户交互、初始化爬行器、确定主题、协调各模块之间的工作、控制爬行过程等方面。

然后,将初始的URL集合传递给URL队列,页面爬行模块会从URL队列中读取第一批URL列表,然后根据这些URL地址从互联网中进行相应的页面爬取。爬取后,将爬取到的内容传到页面数据库中存储,同时,在爬行过程中,会爬取到一些新的URL,此时,需要根据我们所定的主题使用链接过滤模块过滤掉无关链接,再将剩下来的URL链接根据主题使用链接评价模块或内容评价模块进行优先级的排序。完成后,将新的URL地址传递到URL队列中,供页面爬行模块使用。另一方面,将页面爬取并存放到页面数据库后,需要根据主题使用页面分析模块对爬取到的页面进行页面分析处理,并根据处理结果建立索引数据库,用户检索对应信息时,可以从索引数据库中进行相应的检索,并得到对应的结果。图1-2 聚焦爬虫运行的流程

这就是聚焦爬虫的主要工作流程,了解聚焦爬虫的主要工作流程有助于我们编写聚焦爬虫,使编写的思路更加清晰。1.6 小结

1)网络爬虫也叫作网络蜘蛛、网络蚂蚁、网络机器人等,可以自动地浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则去浏览,这些规则我们将其称为网络爬虫算法。使用Python可以很方便地编写出爬虫程序,进行互联网信息的自动化检索。

2)学习爬虫,可以:①私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理,进行更深层次地理解;②为大数据分析提供更多高质量的数据源;③更好地研究搜索引擎优化;④解决就业或跳槽的问题。

3)网络爬虫由控制节点、爬虫节点、资源库构成。

4)网络爬虫按照实现的技术和结构可以分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫等类型。在实际的网络爬虫中,通常是这几类爬虫的组合体。

5)聚焦网络爬虫主要由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块、内容评价模块、链接评价模块等构成。第2章网络爬虫技能总览

在上一章中,我们已经初步认识了网络爬虫,那么网络爬虫具体能做些什么呢?用网络爬虫又能做哪些有趣的事呢?在本章中我们将为大家具体讲解。2.1 网络爬虫技能总览图

如图2-1所示,我们总结了网络爬虫的常用功能。图2-1 网络爬虫技能示意图

在图2-1中可以看到,网络爬虫可以代替手工做很多事情,比如可以用于做搜索引擎,也可以爬取网站上面的图片,比如有些朋友将某些网站上的图片全部爬取下来,集中进行浏览,同时,网络爬虫也可以用于金融投资领域,比如可以自动爬取一些金融信息,并进行投资分析等。

有时,我们比较喜欢的新闻网站可能有几个,每次都要分别打开这些新闻网站进行浏览,比较麻烦。此时可以利用网络爬虫,将这多个新闻网站中的新闻信息爬取下来,集中进行阅读。

有时,我们在浏览网页上的信息的时候,会发现有很多广告。此时同样可以利用爬虫将对应网页上的信息爬取过来,这样就可以自动的过滤掉这些广告,方便对信息的阅读与使用。

有时,我们需要进行营销,那么如何找到目标客户以及目标客户的联系方式是一个关键问题。我们可以手动地在互联网中寻找,但是这样的效率会很低。此时,我们利用爬虫,可以设置对应的规则,自动地从互联网中采集目标用户的联系方式等数据,供我们进行营销使用。

有时,我们想对某个网站的用户信息进行分析,比如分析该网站的用户活跃度、发言数、热门文章等信息,如果我们不是网站管理员,手工统计将是一个非常庞大的工程。此时,可以利用爬虫轻松将这些数据采集到,以便进行进一步分析,而这一切爬取的操作,都是自动进行的,我们只需要编写好对应的爬虫,并设计好对应的规则即可。

除此之外,爬虫还可以实现很多强大的功能。总之,爬虫的出现,可以在一定程度上代替手工访问网页,从而,原先我们需要人工去访问互联网信息的操作,现在都可以用爬虫自动化实现,这样可以更高效率地利用好互联网中的有效信息。2.2 搜索引擎核心

爬虫与搜索引擎的关系是密不可分的,既然提到了网络爬虫,就免不了提到搜索引擎,在此,我们将对搜索引擎的核心技术进行一个简单的讲解。

图2-2所示为搜索引擎的核心工作流程。首先,搜索引擎会利用爬虫模块去爬取互联网中的网页,然后将爬取到的网页存储在原始数据库中。爬虫模块主要包括控制器和爬行器,控制器主要进行爬行的控制,爬行器则负责具体的爬行任务。

然后,会对原始数据库中的数据进行索引,并存储到索引数据库中。

当用户检索信息的时候,会通过用户交互接口输入对应的信息,用户交互接口相当于搜索引擎的输入框,输入完成之后,由检索器进行分词等操作,检索器会从索引数据库中获取数据进行相应的检索处理。

用户输入对应信息的同时,会将用户的行为存储到用户日志数据库中,比如用户的IP地址、用户所输入的关键词等等。随后,用户日志数据库中的数据会交由日志分析器进行处理。日志分析器会根据大量的用户数据去调整原始数据库和索引数据库,改变排名结果或进行其他操作。图2-2 搜索引擎的核心工作流程

以上就是搜索引擎核心工作流程的简要概述,可能大家对索引和检索的概念还不太能区分,在此我为大家详细讲一下。

简单来说,检索是一种行为,而索引是一种属性。比如一家超市,里面有大量的商品,为了能够快速地找到这些商品,我们会将这些商品进行分组,比如有日常用品类商品、饮料类商品、服装类商品等组别,此时,这些商品的组名我们称之为索引,索引由索引器控制。如果,有一个用户想要找到某一个商品,那么需要在超市的大量商品中寻找,这个过程,我们称之为检索。如果有一个好的索引,则可以提高检索的效率;若没有索引,则检索的效率会很低。比如,一个超市里面的商品如果没有进行分类,那么用户要在海量的商品中寻找某一种商品,则会比较费力。2.3 用户爬虫的那些事儿

用户爬虫是网络爬虫中的一种类型。所谓用户爬虫,指的是专门用来爬取互联网中用户数据的一种爬虫。由于互联网中的用户数据信息,相对来说是比较敏感的数据信息,所以,用户爬虫的利用价值也相对较高。

利用用户爬虫可以做大量的事情,接下来我们一起来看一下利用用户爬虫所做的一些有趣的事情吧。

2015年,有知乎网友对知乎的用户数据进行了爬取,然后进行对应的数据分析,便得到了知乎上大量的潜在数据,比如:

·知乎上注册用户的男女比例:男生占例多于60%。

·知乎上注册用户的地区:北京的人口占据比重最大,多于30%。

·知乎上注册用户从事的行业:从事互联网行业的用户占据比重最大,同样多于30%。

除此之外,只要我们细心发掘,还可以挖掘出更多的潜在数据,而要分析这些数据,则必须要获取到这些用户数据,此时,我们可以使用网络爬虫技术轻松爬取到这些有用的用户信息。

同样,在2015年,有网友爬取了3000万QQ空间的用户信息,并同样从中获得了大量潜在数据,比如:

·QQ空间用户发说说的时间规律:晚上22点左右,平均发说说的数量是一天中最多的时候。

·QQ空间用户的出生月份分布:1月份和10月份出生的用户较多。

·QQ空间用户的年龄阶段分布:出生于1990年到1995年的用户相对来说较多。

·QQ空间用户的性别分布:男生占比多于50%,女生占比多于30%,未填性别的占10%左右。

除了以上两个例子之外,用户爬虫还可以做很多事情,比如爬取淘宝的用户信息,可以分析淘宝用户喜欢什么商品,从而更有利于我们对商品的定位等。

由此可见,利用用户爬虫可以获得很多有趣的潜在信息,那么这些爬虫难吗?其实不难,在阅读完本书后,相信你也能写出这样的爬虫。2.4 小结

1)爬虫的出现,可以在一定程度上代替手工访问网页,所以,原先我们需要人工去访问互联网信息的操作,现在都可以用爬虫自动化实现,这样可以更高效率地利用好互联网中的有效信息。

2)检索是一种行为,而索引是一种属性。如果有一个好的索引,则可以提高检索的效率,若没有索引,则检索的效率会很低。

3)用户爬虫是网络爬虫的其中一种类型。所谓用户爬虫,即专门用来爬取互联网中用户数据的一种爬虫。由于互联网中的用户数据信息,相对来说是比较敏感的数据信息,所以,用户爬虫的利用价值也相对较高。  第二篇核心技术篇

·第3章 网络爬虫实现原理与实现技术

·第4章 Urllib库与URLError异常处理

·第5章 正则表达式与Cookie的使用

·第6章 手写Python爬虫

·第7章 学会使用Fiddler

·第8章 爬虫的浏览器伪装技术

·第9章 爬虫的定向爬取技术

通过前面章节的学习,我们已经基本认识了网络爬虫,那么网络爬虫应该怎么实现?核心技术又有哪些呢?在本篇中,我们首先会介绍网络爬虫的相关实现原理与实现技术;随后,讲解Urllib库的相关实战内容;紧接着,带领大家一起开发几种典型的网络爬虫,让大家在实战项目中由浅入深地掌握Python网络爬虫的开发;在学会了一些经典的网络爬虫开发之后,我们将一起研究学习Fiddler抓包分析技术、浏览器伪装技术、爬虫定向抓取技术等知识,让大家更加深入地进入到网络爬虫技术的世界中来。第3章网络爬虫实现原理与实现技术

我们已经初步认识了网络爬虫,并了解了网络爬虫的应用领域。在这一章中,我们将学习网络爬虫的实现原理及其实现技术,并使用metaseeker为大家做一个简单的爬虫案例。3.1 网络爬虫实现原理详解

不同类型的网络爬虫,其实现原理也是不同的,但这些实现原理中,会存在很多共性。在此,我们将以两种典型的网络爬虫为例(即通用网络爬虫和聚焦网络爬虫),分别为大家讲解网络爬虫的实现原理。

1.通用网络爬虫

首先我们来看通用网络爬虫的实现原理。通用网络爬虫的实现原理及过程可以简要概括如下(见图3-1)。

1)获取初始的URL。初始的URL地址可以由用户人为地指定,也可以由用户指定的某个或某几个初始爬取网页决定。

2)根据初始的URL爬取页面并获得新的URL。获得初始的URL地址之后,首先需要爬取对应URL地址中的网页,爬取了对应的URL地址中的网页后,将网页存储到原始数据库中,并且在爬取网页的同时,发现新的URL地址,同时将已爬取的URL地址存放到一个URL列表中,用于去重及判断爬取的进程。

3)将新的URL放到URL队列中。在第2步中,获取了下一个新的URL地址之后,会将新的URL地址放到URL队列中。

4)从URL队列中读取新的URL,并依据新的URL爬取网页,同时从新网页中获取新URL,并重复上述的爬取过程。

5)满足爬虫系统设置的停止条件时,停止爬取。在编写爬虫的时候,一般会设置相应的停止条件。如果没有设置停止条件,爬虫则会一直爬取下去,一直到无法获取新的URL地址为止,若设置了停止条件,爬虫则会在停止条件满足时停止爬取。图3-1 通用网络爬虫的实现原理及过程

以上就是通用网络爬虫的实现过程与基本原理,接下来,我们为大家分析聚焦网络爬虫的基本原理及其实现过程。

2.聚焦网络爬虫

聚焦网络爬虫,由于其需要有目的地进行爬取,所以对于通用网络爬虫来说,必须要增加目标的定义和过滤机制,具体来说,此时,其执行原理和过程需要比通用网络爬虫多出三步,即目标的定义、无关链接的过滤、下一步要爬取的URL地址的选取等,如图3-2所示。图3-2 聚焦网络爬虫的基本原理及其实现过程

1)对爬取目标的定义和描述。在聚焦网络爬虫中,我们首先要依据爬取需求定义好该聚焦网络爬虫爬取的目标,以及进行相关的描述。

2)获取初始的URL。

3)根据初始的URL爬取页面,并获得新的URL。

4)从新的URL中过滤掉与爬取目标无关的链接。因为聚焦网络爬虫对网页的爬取是有目的性的,所以与目标无关的网页将会被过滤掉。同时,也需要将已爬取的URL地址存放到一个URL列表中,用于去重和判断爬取的进程。

5)将过滤后的链接放到URL队列中。

6)从URL队列中,根据搜索算法,确定URL的优先级,并确定下一步要爬取的URL地址。在通用网络爬虫中,下一步爬取哪些URL地址,是不太重要的,但是在聚焦网络爬虫中,由于其具有目的性,故而下一步爬取哪些URL地址相对来说是比较重要的。对于聚焦网络爬虫来说,不同的爬取顺序,可能导致爬虫的执行效率不同,所以,我们需要依据搜索策略来确定下一步需要爬取哪些URL地址。

7)从下一步要爬取的URL地址中,读取新的URL,然后依据新的URL地址爬取网页,并重复上述爬取过程。

8)满足系统中设置的停止条件时,或无法获取新的URL地址时,停止爬行。

现在我们初步掌握了网络爬虫的实现原理以及相应的工作流程,下面来了解网络爬虫的爬行策略。3.2 爬行策略

在网络爬虫爬取的过程,在待爬取的URL列表中,可能有很多URL地址,那么这些URL地址,爬虫应该先爬取哪个,后爬取哪个呢?在通用网络爬虫中,虽然爬取的顺序并不是那么重要,但是在其他很多爬虫中,比如聚焦网络爬虫中,爬取的顺序非常重要,而爬取的顺序,一般由爬行策略决定。在这一节中,我们将为大家介绍一些常见的爬行策略。

爬行策略主要有深度优先爬行策略、广度优先爬行策略、大站优先策略、反链策略、其他爬行策略等。下面我们将分别进行介绍。

如图3-3所示,假设有一个网站,ABCDEFG分别为站点下的网页,图中箭头表示网页的层次结构。

假如此时网页ABCDEFG都在爬行队列中,那么按照不同的爬行策略,其爬取的顺序是不同的。

比如,如果按照深度优先爬行策略去爬取的话,那么此时会首先爬取一个网页,然后将这个网页的下层链接依次深入爬取完再返回上一层进行爬取。图3-3 某网站的网页层次结构示意图

所以,若按深度优先爬行策略,图3-3中的爬行顺序可以是:A→D→E→B→C→F→G。

如果按照广度优先的爬行策略去爬取的话,那么此时首先会爬取同一层次的网页,将同一层次的网页全部爬取完后,在选择下一个层次的网页去爬行,比如,上述的网站中,如果按照广度优先的爬行策略去爬取的话,爬行顺序可以是:A→B→C→D→E→F→G。

除了以上两种爬行策略之外,我们还可以采用大站爬行策略。我们可以按对应网页所属的站点进行归类,如果某个网站的网页数量多,那么我们则将其称为大站,按照这种策略,网页数量越多的网站越大,然后,优先爬取大站中的网页URL地址。

一个网页的反向链接数,指的是该网页被其他网页指向的次数,这个次数在一定程度上代表着该网页被其他网页的推荐次数。所以,如果按反链策略去爬行的话,那么哪个网页的反链数量越多,则哪个网页将被优先爬取。但是,在实际情况中,如果单纯按反链策略去决定一个网页的优先程度的话,那么可能会出现大量的作弊情况。比如,做一些垃圾站群,并将这些网站互相链接,如果这样的话,每个站点都将获得较高的反链,从而达到作弊的目的。作为爬虫项目方,我们当然不希望受到这种作弊行为的干扰,所以,如果采用反向链接策略去爬取的话,一般会考虑可靠的反链数。

除了以上这些爬行策略,在实际中还有很多其他的爬行策略,比如OPIC策略、Partial PageRank策略等。3.3 网页更新策略

一个网站的网页经常会更新,作为爬虫方,在网页更新后,我们则需要对这些网页进行重新爬取,那么什么时候去爬取合适呢?如果网站更新过慢,而爬虫爬取得过于频繁,则必然会增加爬虫及网站服务器的压力,若网站更新较快,但是爬虫爬取的时间间隔较长,则我们爬取的内容版本会过老,不利于新内容的爬取。显然,网站的更新频率与爬虫访问网站的频率越接近,则效果越好,当然,爬虫服务器资源有限的时候,此时爬虫也需要根据对应策略,让不同的网页具有不同的更新优先级,优先级高的网页更新,将获得较快的爬取响应。

具体来说,常见的网页更新策略主要有3种:用户体验策略、历史数据策略、聚类分析策略等,以下我们将分别进行讲解。

在搜索引擎查询某个关键词的时候,会出现一个排名结果,在排名结果中,通常会有大量的网页,但是,大部分用户都只会关注排名靠前的网页,所以,在爬虫服务器资源有限的情况下,爬虫会优先更新排名结果靠前的网页。这种更新策略,我们称之为用户体验策略,那么在这种策略中,爬虫到底何时去爬取这些排名结果靠前的网页呢?此时,爬取中会保留对应网页的多个历史版本,并进行对应分析,依据这多个历史版本的内容更新、搜索质量影响、用户体验等信息,来确定对这些网页的爬取周期。

除此之外,我们还可以使用历史数据策略来确定对网页更新爬取的周期。比如,我们可以依据某一个网页的历史更新数据,通过泊松过程进行建模等手段,预测该网页下一次更新的时间,从而确定下一次对该网页爬取的时间,即确定更新周期。

以上两种策略,都需要历史数据作为依据。有的时候,若一个网页为新网页,则不会有对应的历史数据,并且,如果要依据历史数据进行分析,则需要爬虫服务器保存对应网页的历史版本信息,这无疑给爬虫服务器带来了更多的压力和负担。如果想要解决这些问题,则需要采取新的更新策略。比较常用的是聚类分析策略。那么什么是聚类分析策略呢?

在生活中,相信大家对分类已经非常熟悉,比如我们去商场,商场中的商品一般都分好类了,方便顾客去选购相应的商品,此时,商品分类的类别是固定的,是已经拟定好的。但是,假如商品的数量巨大,事先无法对其进行分类,或者说,根本不知道将会拥有哪些类别的商品,此时,我们应该如何解决将商品归类的问题呢?

这时候我们可以用聚类的方式解决,依据商品之间的共性进行相应分析,将共性较多的商品聚为一类,此时,商品聚集成的类的数目是不一定的,但是能保证的是,聚在一起的商品之间一定有某种共性,即依据“物以类聚”的思想去实现。

同样,在我们的聚类算法中,也会有类似的分析过程。

将聚类分析算法运用在爬虫对网页的更新上,我们可以这样做,如图3-4所示。图3-4 网页更新策略之聚类算法

1)首先,经过大量的研究发现,网页可能具有不同的内容,但是一般来说,具有类似属性的网页,其更新频率类似。这是聚类分析算法运用在爬虫网页的更新上的一个前提指导思想。

2)有了1中的指导思想后,我们可以首先对海量的网页进行聚类分析,在聚类之后,会形成多个类,每个类中的网页具有类似的属性,即一般具有类似的更新频率。

3)聚类完成后,我们可以对同一个聚类中的网页进行抽样,然后求该抽样结果的平均更新值,从而确定对每个聚类的爬行频率。

以上,就是使用爬虫爬取网页的时候,常见的3种更新策略,我们掌握了其算法思想后,在后续我们进行爬虫的实际开发的时候,编写出来的爬虫执行效率会更高,并且执行逻辑会更合理。3.4 网页分析算法

在搜索引擎中,爬虫爬取了对应的网页之后,会将网页存储到服务器的原始数据库中,之后,搜索引擎会对这些网页进行分析并确定各网页的重要性,即会影响用户检索的排名结果。

所以在此,我们需要对搜索引擎的网页分析算法进行简单了解。

搜索引擎的网页分析算法主要分为3类:基于用户行为的网页分析算法、基于网络拓扑的网页分析算法、基于网页内容的网页分析算法。接下来我们分别对这些算法进行讲解。

1.基于用户行为的网页分析算法

基于用户行为的网页分析算法是比较好理解的。这种算法中,会依据用户对这些网页的访问行为,对这些网页进行评价,比如,依据用户对该网页的访问频率、用户对网页的访问时长、用户的单击率等信息对网页进行综合评价。

2.基于网络拓扑的网页分析算法

基于网络拓扑的网页分析算法是依靠网页的链接关系、结构关系、已知网页或数据等对网页进行分析的一种算法,所谓拓扑,简单来说即结构关系的意思。基于网络拓扑的网页分析算法,同样主要可以细分为3种类型:基于网页粒度的分析算法、基于网页块粒度的分析算法、基于网站粒度的分析算法。

PageRank算法是一种比较典型的基于网页粒度的分析算法。相信很多朋友都听过Page-Rank算法,它是谷歌搜索引擎的核心算法,简单来说,它会根据网页之间的链接关系对网页的权重进行计算,并可以依靠这些计算出来的权重,对网页进行排名。当然,具体的算法细节有很多,在此不展开讲解。除了PageRank算法之外,HITS算法也是一种常见的基于网页粒度的分析算法。

基于网页块粒度的分析算法,也是依靠网页间链接关系进行计算的,但计算规则有所不同。我们知道,在一个网页中通常会包含多个超链接,但一般其指向的外部链接中并不是所有的链接都与网站主题相关,或者说,这些外部链接对该网页的重要程度是不一样的,所以若要基于网页块粒度进行分析,则需要对一个网页中的这些外部链接划分层次,不同层次的外部链接对于该网页来说,其重要程度不同。这种算法的分析效率和准确率,会比传统的算法好一些。

基于网站粒度的分析算法,也与PageRank算法类似,但是,如果采用基于网站粒度进行分析,相应的,会使用SiteRank算法。即此时我们会划分站点的层次和等级,而不再具体地计算站点下的各个网页的等级。所以其相对于基于网页粒度的算法来说,则更加简单高效,但是会带来一些缺点,比如精确度不如基于网页粒度的分析算法精确。

3.基于网页内容的网页分析算法

在基于网页内容的网页分析算法中,会依据网页的数据、文本等网页内容特征,对网页进行相应的评价。

以上,我简单为大家介绍了搜索引擎中的网页分析算法,我们学习爬虫,需要对这些算法进行相应的了解。3.5 身份识别

在爬虫对网页爬取的过程中,爬虫必然需要访问对应的网页,正规的爬虫一般会告诉对应网页的网站站长其爬虫身份。网站的管理员则可以通过爬虫告知的身份信息对爬虫的身份进行识别,我们称这个过程为爬虫的身份识别过程。

那么,爬虫应该如何告知网站站长自己的身份呢?

一般地,爬虫在对网页进行爬取访问的时候,会通过HTTP请求中的User Agent字段告知自己的身份信息。一般爬虫访问一个网站的时候,首先会根据该站点下的Robots.txt文件来确定可爬取的网页范围,Robots协议是需要网络爬虫共同遵守的协议,对于一些禁止的URL地址,网络爬虫则不应爬取访问。同时,如果爬虫在爬取某一个站点时陷入死循环,造成该站点的服务压力过大,如果有正确的身份设置,那么该站点的站长则可以想办法联系到该爬虫方,然后停止对应的爬虫程序。

当然,有些爬虫会伪装成其他爬虫或浏览器去爬取网站,以获得一些额外数据,或者有些爬虫,会无视Robots协议的限制而任意爬取。从技术的角度来说,这些行为实现起来不难,但是这些行为是我们不提倡的,因为只有共同遵守一个良好的网络规则,才能够达到爬虫方和站点服务方的双赢。3.6 网络爬虫实现技术

通过前面的学习,我们基本上对爬虫的基本理论知识有了比较全面的了解,那么,如果我们要实现网络爬虫技术,要开发自己的网络爬虫,可以使用哪些语言进行开发呢?

开发网络爬虫的语言有很多,常见的语言有:Python、Java、PHP、Node.JS、C++、Go语言等。以下我们将分别介绍一下用这些语言写爬虫的特点:

·Python:爬虫框架非常丰富,并且多线程的处理能力较强,并且简单易学、代码简洁,优点很多。

·Java:适合开发大型爬虫项目。

·PHP:后端处理很强,代码很简洁,模块也较丰富,但是并发能力相对来说较弱。

·Node.JS:支持高并发与多线程处理。

·C++:运行速度快,适合开发大型爬虫项目,成本较高。

·Go语言:同样高并发能力非常强。

以上分别介绍了写爬虫的常见实现技术,本书中,笔者将会以Python语言为例,带领大家一步步的地学好爬虫的开发。3.7 实例——metaseeker

metaseeker是一款比较实用的网站数据采集程序,使用该采集程序,可以让大家比较快速、形象地了解爬虫的工作过程。所以在本节中,会以metaseeker为例,跟大家一起学习如何采集当当网的商品及价格信息,让大家对爬虫工作过程有一个形象地了解,为后续我们使用Python开发爬虫打下基础。

如图3-5所示,我们将为大家爬取当当网新书栏目下的商品的名称及价格等信息(http://e.dangdang.com/morelist_page.html?columnType=all_rec_xssf&title=%E6%96%B0%E4%B9%A6%E9%A6%96%E5%8F%91)。图3-5 当当网新书网页

可以从官网下载metaseeker工具(http://www.gooseeker.com/pro/product.html),进入后,选择第三种方案下载,如图3-6所示。该软件有的版本可以与浏览器配合使用,方案三集成了浏览器和该爬虫软件,安装起来比较简单。图3-6 使用第三种方案下载

下载之后,我们只需要打开安装即可,安装好之后,打开该软件,会出现一个类似浏览器的界面,我们打开要爬取的网址(即刚才提到的当当网的图书商品页),单击“MS谋数台”,如图3-7所示。图3-7 单击“MS谋数台”

打开后,会出现图3-8所示的界面。

此时,我们需要将刚才的商品页面网址复制到左上角的网址处,并按一下回车键,如图3-9所示。在加载了一会儿之后,软件的左下角处会出现“完成”字样,此时代表网页加载完成。图3-8 MS谋数台显示界面

然后,我们需要在该界面的“工作台”中,创建命名主题,创建好命名主题后,需要单击“查重”按钮,看是否名称冲突,若名称冲突则需要换一个主题名字。如图3-10所示,创建了一个名为dangdangbookprice的主题名。

创建主题名之后,需要进行下一步操作,即创建规则。我们在创建规则的页面中,单击新建,便可以输入想创建的规则名称,该规则名称可以自己拟定,如图3-11所示,我们创建了一个名为“当当图书商品价格抓取”的规则名称。图3-9 页面加载完成图3-10 创建主题名图3-11 创建规则名称

创建好了该规则名称后,我们需要选定该规则名,然后右键,单击添加→包容,如图3-12所示。

随后,会出现如图3-13所示的界面,让我们填写被爬取内容的详细信息,此时,我们需要根据自己的需求规划好一共需要多少个包容,比如,在此我们需要爬取商品的名称和商品的价格,所以两个包容就够了。我们先创建第一个包容,即商品价格,输入对应名称,然后勾选好右边的“关键内容”。完成之后,可以单击保存,然后再次选中规则名,并右键添加第二个包容,即商品名称。图3-12 添加包容信息图3-13 填写包容的详细信息

完成之后,会出现如图3-14所示界面。

随后,我们可以在该界面的浏览器窗口中,选择其中一个商品的名称,即以一个商品名为例,建立好对应的规则。单击后可能会出现如图3-15所示的提示。图3-14 添加包容完成后的显示界面图3-15 定为网页位置失败的提示

如果出现图3-15中的提示,我们可以单击该界面左上角的文件→刷新网页结构,如图3-16所示,这样即可解决该问题。图3-16 刷新网页结构

解决该问题后,我们再次单击其中一个商品名,单击后,网页标签处自动定位到对应的元素中。如图3-17所示,我们单击了“幸存者”之后,在网页标签中自动定位到了对应的DIV中,将DIV展开,有一个“#text”的字样,选中该字样,可以看到,在工作台的文本内容中,出现了对应的商品名,此时代表商品名定位成功。图3-17 商品定位成功

随后,我们选中对应的“#text”,然后右键,单击内容映射→商品名称,将该规则映射到对应的商品名称包容中,那么以后,便可以根据这个规则去爬取网页上的其他商品的名称了,如图3-18所示。图3-18 将规则映射到对应的商品名称包容中

我们还需要指定价格的规则,此时我们在浏览器区域中,单击该商品对应的价格,然后,在网页标签处会进行自动定位,如图3-19所示,我们单击了对应的价格“9.09”之后,网页标签处,自动定位到了对应的I标签下,我们展开I标签,同样可以看得到一个“#text”,选中“#text”在工作台的文本内容中,会出现对应的价格信息,此时,代表定位成功。

然后,我们同样需要选中该标签,然后右击,将该标签映射到商品价格中,如图3-20所示。图3-19 单击商品价格自动定位图3-20 将标签映射到商品价格中

标签规则映射好之后,我们返回工作台,然后单击测试,便可以看得到当前是否爬取该界面中的所有商品信息。如图3-21所示,返回工作台,并单击测试。

单击了测试后,在输出信息中,我们可以看得到,该输出信息包含了该界面中所有的商品名称和对应的商品价格,也就是说,我们成功采集了,如图3-22所示,由于界面空间有限,只展现了部分爬取信息。

如果我们要对该网站下其他网页中的商品信息都进行自动爬取,虽然也是可以的,但是需要设置对应的爬取规则。在这里,metaseeker的使用仅作为本书的一个实例,并不是本书的重点内容,所以,关于metaseeker的深入使用部分我们就不过多讲解了,对应的内容不难,有兴趣的读者可以查看相关资料。图3-21 返回工作台图3-22 成功采集界面中所有的商品信息

我们讲该实例的目的是让大家对爬虫有一个形象的初步印象,方便后续深入学习爬虫开发。3.8 小结

1)聚焦网络爬虫,由于其需要有目的地进行爬取,所以对于通用网络爬虫来说,必须要增加目标的定义和过滤机制,具体来说,此时,其执行原理和过程需要比通用网络爬虫多出3步,即目标的定义、无关链接的过滤、下一步要爬取的URL地址的选取。

2)常见的网页更新策略主要有3种:用户体验策略、历史数据策略、聚类分析策略。

3)聚类分析可以依据商品之间的共性进行相应的处理,将共性较多的商品聚为一类。

4)在爬虫对网页爬取的过程中,爬虫必然需要访问对应的网页,此时,正规的爬虫一般会告诉对应网页的网站站长其爬虫身份。网站的管理员则可以通过爬虫告知的身份信息对爬虫的身份进行识别,我们称这个过程为爬虫的身份识别过程。

5)开发网络爬虫的语言有很多,常见的语言有Python、Java、PHP、Node.JS、C++、Go语言等。

6)metaseeker是一款比较实用的网站数据采集程序,使用该采集程序,可以让大家比较快速、形象地了解爬虫的工作过程。第4章Urllib库与URLError异常处理

Urllib库是Python中的一个功能强大、用于操作URL,并在做爬虫的时候经常要用到的库。在Python2.X中,分Urllib库和Urllib2库,Python3.X之后合并到Urllib库中,使用方法稍有不同,在此,本书中代码会以Python的新版,即Python3.X进行讲解,具体使用的是Python3.5.2。同时在本章中,我还会为大家讲解如何处理异常等知识。4.1 什么是Urllib库

什么是Urllib呢?Urllib是Python提供的一个用于操作URL的模块,在Python2.X中,有Urllib库,也有Urllib2库,在Python3.X中Urllib2合并到了Urllib中,我们爬取网页的时候,经常需要用到这个库。

升级合并后,模块中包的位置变化的地方较多。在此,我们总结并为大家列举一些常见的位置变动,方便之前用Python2.X的朋友在使用Python3.X的时候可以快速掌握,其他的我们在用到时具体为大家讲解。

常见的变化有:

·在Python2.X中使用import urllib2——对应的,在Python3.X中会使用import urllib.request,urllib.error。

·在Python2.X中使用import urllib——对应的,在Python3.X中会使用import urllib.request,urllib.error,urllib.parse。

·在Python2.X中使用import urlparse——对应的,在Python3.X中会使用import urllib.parse。

·在Python2.X中使用import urllib2——对应的,在Python3.X中会使用import urllib.request,urllib.error。

·在Python2.X中使用urllib2.urlopen——对应的,在Python3.X中会使用urllib.request.urlopen。

·在Python2.X中使用urllib.urlencode——对应的,在Python3.X中会使用urllib.parse.urlencode。

·在Python2.X中使用urllib.quote——对应的,在Python3.X中会使用urllib.request.quote。

·在Python2.X中使用cookielib.CookieJar——对应的,在Python3.X中会使用http.CookieJar。

·在Python2.X中使用urllib2.Request——对应的,在Python3.X中会使用urllib.request.Request。

以上,总结了Urllib相关模块中从Python2.X到Python3.X的常见的一些变动,如果之前用的是Python2.X版本或者在网上阅读Python2.X关于Urllib这一块的代码,依据这个变动关系,可以快速写出Python3.X的程序。

如果没有Urllib这一方面的基础,那么没关系,在这一节中只需要了解Urllib库是做什么的即可,该变动关系可以暂时不用背下,在学习了本章后面几节之后,读者将详细了解这些代码的具体应用,懂得实战应用之后再记忆亦可,在以后遇到用Python2.X写的关于Urllib这一块的代码时,该变动关系同样会让你更快地理解一些常见的代

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载