络爬虫( 络蜘蛛)经常被人们认为是一项特别强大而实用的工具,用来从 上搜集各种不同的数据。其实它的本质就是通过编程的手段来访问一系列不同的 页并抽取页面中的数据信息。
利用 络爬虫,我们可以搜集文本,图片以及其他类型的数据。而这些事情,并不需要通过你要访问的 站提供官方的API,你只需要模拟浏览器的行为来达到这个简单的目的。
在这里,你会了解到 络爬取信息的基本概念和组成部分。我们也会用Quotes to Scrape(http://quotes.toscrape.com/)作为例子来了解如何抽取这个 站上面我们所关心的数据。跟着一路走下来,你会完成一个简单的 络爬虫,它的功能就是爬取Quotes to Scrape(http://quotes.toscrape.com/)的页面,并且抽取我们所关心的数据。
热身,热身
既然安装完了Python,下面就来看看,如何创建一个简单的爬虫。创建爬虫有好多方式,条条大路通罗马。但是,我们想走效率高的,不绕弯的,不掉坑里的一条路。开源 区有很多不错的选择,在这里,我选用的是Scrapy框架。Scrapy帮助我们解决了绝大部分的繁琐事情,让我们真正专注于要关心的逻辑,也就是你要爬取哪些页面,抽取哪些数据,并如何存储它们。
如何安装Scrapy简单,打开Shell或者命令行窗口,运行下面的命令
$pip install scrapy
如上图所示,Scrapy安装成功了。我们可以运行一个简单的命令,来检验一下Scrapy是否可以正常工作。运行如下命令,是否返回HTML的内容。
如果能够返回HTML页面的信息,则说明scrapy工作正常。接下来,我们可以创建一个文件夹,用来保存我们的爬虫类。运行下面的命令,创建一个文件夹
$mkdir scrapy-spiders
进入你刚创建的文件夹
$cd scrapy-spiders
$vim quotespider.py
我们通过创建一个scrapy.Spider的派生类,来达到简化繁琐工作的目的。大部分的工作已经被包含在scrapy.Spider这个类当中了,这个类是scrapy框架提供的。我们需要修改其中的属性,就可以达到自定义的目的。这里,我们为了简化和演示的目的,仅仅修改两个属性,name和start_urls。
name— 给你的 络爬虫起一个名字
start_urls— 络爬虫从哪个 址开始爬取,可以是一个 址,也可以是一批 址
修改之后的quotespider.py文件内容如下:
让我们简单地逐行说明一下程序代码的意思。首先,我们在程序第一行中引入scrapy框架。然后,我们在第二行创建了一个名字叫做QuoteSpider的类。这个类是scrapy.Spider的子类。接着,我们在第三行,第四行修改了name和start_urls的属性。好啦,我们第一步的任务结束啦。现在可以运行一下,看看结果是什么。
大家看到红线的部分,返回值是200,证明我们成功地爬取了 址。但是,下面有错误,原因是蓝线的部分造成的。下面将在第二部分修正这个部分。实现一个parse的方法,来告诉爬虫,当成功爬取了 址之后,我们需要如何解析这个 页的内容。也就是如何抽取页面当中我们关心的数据。
用开发者工具,我找到了这个信息在HTML文档DOM树中的结点位置。
那么我就可以用scrapy框架自带的CSS或者XPath选择器,来选中我关心的结点,然后读取里面的文本值。修改之后的quotespider.py文件内容为
运行一下程序,结果如下
到目前为止,你已经会爬取一个单独的页面,并且可以抽取你想要的信息了。如果我们想抽取的信息是保存在页面中某个超链接里面呢需要进一步访问那个超链接去获得进一步的信息。下一步介绍如果继续访问页面中的超链接,你其实也应该想得到,跟访问一个页面是同样的。只需要获得那个超链接的 址,爬取那个页面,并按照刚才的步骤去解析 页就好了。
下面是修改之后的quotespider.py文件内容
在代码中,可以看到通过”.author+a::attr(href)”选中了超链接的相对地址,然后调用response.follow方法,并设置parse_author作为解析页面的方法。parse_author的方法内部,对三个页面标签做了抽取,他们是名字,出生日期和出生地点。运行一下程序,结果如下
从程序输出结果来看,我们成功的抽取了超链接的内容。根据这个思路,可以设计一个比较复杂的爬虫,来爬取这个 站的所有页面,并把相关的数据保存下来。
关于如何保存成不同类型的文件,而不是输出到shell或者控制台中,可以实用命令行参数-o,比如下面就是一个输出成JSON的例子。Scrapy还支持多种文件格式,比如csv,JSON Lines,XML。
$scrapy runspider quotespider.py -o crawlresult.json
到这里,就介绍完了如何创建一个简单的爬虫。
参考链接:
Scrapy Library: https://doc.scrapy.org/en/latest/intro/overview.html
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览211392 人正在系统学习中 相关资源:开源的爬虫软件Heritrix3.1.0_开源爬虫-Java工具类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!