Scrapy 入门教程之爬取iTunes app数据

Scrapy 是什么?

Scrapy 是一个开源的基于Twisted的python爬虫框架,我们只要定制几个简单的模块就能实现网络数据的爬取。

Scrapy 的整体架构

简单的解释一下上面的图: 爬虫处理的原材料是一个或多个url,爬取时Sheduler会把一个url分配给Downloader来进行一次网络的request请求,请求完成后Downloader再把所得到的response传到Spiders,如果返回的数据是我们需要的,数据就会被处理成相应的Item交给ItemPipeline来进行存储等处理。如果返回的仍然是要处理的url,那么就要交由Scheduler就行再一次的处理过程。

3.Scrapy的安装

sudo pip_install scrapy 或 sudo easy_intall scrapy

输入密码安装完成。输用 scrapy 如果没有 command not found 就表示已经安装成功。

4.创建项目

scrapy startproject project_name

如果看到上面的提示,那么我们的项目就创建成功了。切换到项目录下,我们会看到如下的目录结构

appScrapy/ scrapy.cfg整个项目的配制信息 appScrapy/存放所有python定制模块的文件夹 init.py items.py保存爬取到的的数据的数据结构 pipelines.py数据流处理文件,对爬取的数据流进行处理 settings.py设置文件,在这里设置数据库等 spiders/存放我们定制的爬虫 init.py … 我们来找全目标,appStore的娱乐排行榜https://itunes.apple.com/cn/genre/ios-yu-le/id6016?mt=8

我们要爬取的数据就是列表中的app名字跟其相应的具体信息的url。

首先我们来定制我们用来保存数据类型的 items.py,打开items.py,境加后的代码如下:

.Item):# define the fields for your item here like:name = scrapy.Field()url = scrapy.Field()

简单说明一下,所有item都继承于scrapy.Item,里面的字段都是scrapy.Field()类型,scrapy.Field()可以接收任何数据类型。

现在该定制我们的爬虫了。

在spiders 文件夹下建立一个AppScrapy.py,然后打开添加如下代码

from scrapy.spider import BaseSpiderfrom appScrapy.items import AppscrapyItem:name = ‘app_scrapy’start_urls = [“https://itunes.apple.com/cn/genre/ios-yu-le/id6016?mt=8”]:result = []lis = response.xpath(“//div[@class=’grid3-column’]/div”)for li in lis:array = li.xpath(“./ul/li”)for node in array:item = AppscrapyItem()item[“name”] = node.xpath(“./a/text()”).extract()item[“url”] = node.xpath(“./a/@href”).extract()result.append(item)return result

所有爬虫类都需要继承自 BaseSpider,并且必须定义一个name,因为启动爬虫时我们要靠这个名字来启动。一个url的数组,必须的这个爬虫才能知道自己应该去哪,最后必须实现parse方法,在这里对爬回来的数据真行筛选得到我们想要的。

当我们启动这个爬虫时 (scrapy crawl app_scrapy),scrapy会从start_urls中取出第一条url,并且用这个url发起一个request,并且把parse作为该request的回调函数,在回调函数中的response就是该request请求后得到的响应。

对于内容的选取我们用xpath方法,xpath方法中要求输入一个路径返回一个selector数组。

对于路径我们可以使用Chrome的开发者工具得到,如上图所示。 我们想要获取内容时,只要在Element选项卡下选中内容,然后右键选择 copy xPath

lis = response.xpath(“//div[@class=’grid3-column’]/div”)

首先我们利用xpath获得 class = ‘grid3-column’的div 中所有的div,返回的值一个数组。从上面的图片中我们可以看数组中应该是3个表示div 的selector.

每个div中的内容如上图所示。我们取出每一个div对其内容再解析。

for li in lis:array = li.xpath(“./ul/li”)for node in array:item = AppscrapyItem()item[“name”] = node.xpath(“./a/text()”).extract()item[“url”] = node.xpath(“./a/@href”).extract()result.append(item)

首先用for 循环取出每一个div,然后在当前的div下获取所有的ul下的所有li,所上图所示,我们会得到一个表示li的selector数组。我们再看一下li的结构

中间的文字我们通过text()来获得,所以当前li的文字路径为”./a/text()” “.”表示当前的selector开始。如果这样返回,xpath返回的是一个selector.我们想要获取其真正的值还需要调用extract(),这样就会返回一个其真实字面值的数组。 要想获取字段的属性值,需要使用 @,如上面的@href,然后把这些值赋给我们写好的item就ok了。

数据当然要把保存了,未完待续,下次写怎么保存到数据库。

,当你感到悲哀痛苦时,最好是去学些什么东西。

Scrapy 入门教程之爬取iTunes app数据

相关文章:

你感兴趣的文章:

标签云: