Python爬虫框架scrapy入门


[success]上周花两天时间快速就学完了Python基础,因为之前都是学过一点的,所以学起来也挺快的,学完了基础然后就迅速学习爬虫,经过我一番努力终于可以爬数据了(目前还非常基础),所以这里主要介绍一下这个框架怎么搭建[/success]

这里直接讲怎么安装这个框架吧,可以使用pip来安装,不过这个挺麻烦的,这里推荐安装anaconda(官网传送门),我前面的文章也有说过怎么安装它,所以这里就不多说了,我们输入以下命令来进行安装(windows的安装非常简单,所以这里不说):conda install scrapy

输入后就可以自动安装,安装完毕后可以输入scrapy可以看一下是否安装成功。首先我们需要创建一个项目,可以输入以下命令创建:scrapy startproject 项目名称 创建好后就可以在当前目录看到自己的文件夹了,我们这里先不管它,先介绍一下其他的命令。

scrapy有一个调试的功能,我们可以输入:scrapy shell 调试网址来进行各种调试,调试主要就是用来看一下你写抓取脚本是否可以正常工作。

比如我们来简单的获取一下我网站的一篇日记:scrapy shell https://xiaoyou66.com

我们可以看到网页源码

然后我们可以输入:response.css('header')这个是一个css选择器,选择header标签下所有的内容,结果如图所示:

好的,现在成功获取了内容,接下来如果我们想实现嵌套的获取那么该怎么做呢?

输入:response.css('header p') 这个意思就是获取header标签里面的p标签

下面,我们想直接获取里面的内容,可以使用:response.css('header p::text').extract()

这里::text就是直接获取标签里面的内容,extract()就是提取这些内容到列表中,这样比如我们只想看到第一个内容可以输入:response.css('header p::text').extract()[0]就可以直接查看了。

下面说一下其他的参数:

1.extract_first()extract()[0]的效果都是一样的都是获取第一个内容

2.我们可以把数据先放到一个变量里面然后在在这个变量的基础上在进行选择变量名= response.css('div')[0] 然后再变量名.css('p::text').extract()

3.response.css('div.quote')[0]这个.其实就是class选择器,可以选择class为quote的div 我们也可以使用 #text 作为参数,这个#是id选择器(这里如果.和div空开的话就相当于嵌套获取)

4.我们如果想提取标签里面的参数呢?response.css("a::attr(href)")这个就是获取a标签里的连接,如果要提取图片的地址img::attr(src)

5.我们想获取div里面所有的文本可以:response.css("div *::text").extract()

其他高级用法,可以自己上网查找相关教程

下面我们讲一下xpath教程:xpath也是一个数据选择器,下面讲一下基本用法

最常用的几个路径:

基本用法:response.xpath("表达式"),提取属性的话既然使用:@,那我们要提取href就是:@href,(直接输入href是不行的,我们还需要加上一个路径)response.xpath("//@href")

下面如何我们想提取某一个标签下面的href内容怎么办?response.xpath("//ol//@href"那个ol就是ol标签。

我们还想限定一下:response.xpath("//ol[@class='page']//@href")

这个就是相当于选择了class为page的ol标签,并且获取里面的href内容。(里面那个class也是可以换的)注意:这个.extract()属性还是可以用在这个上面,把我们提取的内容直接转换成列表。

接下来我们来提取标签里面的内容:response.xpath("//title//text()").extract()

这个//text就是获取title标签里面的内容。
下面我们继续:response.xpath("string(//div[@class='post'])").extract()这个string就是获取标签李里面的所有内容,下面有一些常用的:

下面继续讲一下scrapy的其他命令:

1.scrapy settings --get DOWNLOAD_DELAY 这个可以获取scrapy的蜘蛛下载延迟时间。

2.scrapy runspider scrapy_cn.py这个是直接运行你写的蜘蛛代码,而不需要自己创建一个项目。

3.scrapy fetch http://www.scrapyd.cn >d:/3.html:这个是直接把蜘蛛爬取的内容保存到本地,一般用来判断爬取的文件是否包含自己想要的内容。

4.scrapy view http://www.scrapyd.cn这个和上面那个差不多都是查看蜘蛛爬取的内容

5.scrapy version这个就是查看版本

6.scrapy crawl XX这个也是很常用的命令,用来运行自己项目,这个xx是自己定义的蜘蛛名字,这个后面会说。

下面说一下怎么在pycharm运行自己的爬虫项目:

我们先用pycharm打开自己项目文件,然后在run里面的config做一下配置:

先点击+新建一个Python运行项目,然后名字可以改成自己的文件名。在script path需要改成自己项目下的cmdline.py文件,这个文件项目里没有我们需要自己添加:我的在这里D:anacondaLibsite-packagesscrapy,然后那个name需要改成crawl 爬虫名 其他的部分自己对着改就行了。

下面讲一下最基本的代码:

#批量获取内容然后保存到本地
import scrapy

class itemSpider(scrapy.Spider):
    name = 'spider' #这个是爬虫的名字在使用命令行调用时需要输入scrapy crawl spider
    start_urls = ['http://lab.scrapyd.cn']#这个是要爬的地址

    def parse(self, response):
        mingyan = response.css('div.quote')#这个就是过滤出 class为quote的div标签
        for mingyan1 in mingyan:#因为结果返回的是一个数组,我们需要遍历这个数组
            text = mingyan1.css('.text::text').extract_first()  # 提取名言(.是class选择器 选择class为text的标签)
            #::text其实就是获取标签里面的内容
            autor = mingyan1.css('.author::text').extract_first()  # 提取作者
            tags = mingyan1.css('.tags .tag::text').extract()  # 提取标签
            #这个其实就是quote下面的class为tags标签,然后在获取里面class为tags的标签
            tags = ','.join(tags)  # 数组转换为字符串
            #这个是把数组换成字符串
            fileName = '%s-语录.txt' % autor  # 爬取的内容存入文件,文件名为:作者-语录.txt
            f = open(fileName, "a+")  # 追加写入文件
            f.write(text)  # 写入名言内容
            f.write('
')  # 换行
            f.write('标签:'+tags)  # 写入标签
            f.close()  # 关闭文件操作

这里稍微讲一下项目的目录结构:

我们写的代码一般放在spiders文件夹下面,然后items.py就是主要放参数的地方,比如我这里设置了5个参数,分别保存不同的数据。pipelines.py主要用来处理自己爬虫获取到的数据,这里我写的保存到本地和数据库都是在这里写的。middlewares.py:中间件,目前我也不知道是干什么的。

下面直接贴一个爬虫实例:爬取某个网站的前100名学校内容(网址传送门)并且把内容保存到文件和数据库中。大家可以从我的github(传送门)上下载,进行试验。实际效果演示:


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录