使用scrapy爬取

了解scrapy框架,使用scrapy爬取酒店评论
python2.7.15

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

scrapy分为以下几个工作部件
引擎(Scrapy Engine),用来处理整个系统的数据流处理,触发事务(框架核心)。
调度器(Scheduler),用来接受引擎发过来的请求,放入队列中,并在引擎再次请求的时候返回。
下载器(Downloader),用于下载网页内容,并将网页内容返回给蜘蛛。
蜘蛛(Spiders),蜘蛛就是我们以前写的爬虫,用它来制订特定域名或网页的解析规则。编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。
项目管道(Item Pipeline),负责处理有蜘蛛从网页中抽取的项目,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
下载器中间件(Downloader Middlewares),位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
蜘蛛中间件(Spider Middlewares),介于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。
调度中间件(Scheduler Middlewares),介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

scrapy的安装

pip安装scrapy
这个会有很多包依赖,在安装scrapy之前要先安装好这些包依赖,包依赖大致有这些:
wheel
lxml
Twisted
pywin32
以上全了之后再安装scrapy

Anaconda安装
详细教程请移步scrapy中文网
下载了Anaconda后个人感觉像又下了一个python,scrapy是在ana路径下的python里,如果要用scrapy就要在建立工程时选ana路径的python,但是这样一来你原本路径里的其他包就不能用了,各有各的好处吧

建立工程

打开命令行,进入你选好的路径,scrapy startproject xxx
然后打开文件夹,可以看到生成了以下文件:
在这里插入图片描述
你可以在spider下新建一个py文件,来放你的爬虫

items文件

items文件的类里可以定义你要获取的项目,比如这次爬取的评论,商品,评论者,酒店名称,评论时间等等。
在这里插入图片描述
在这里定义好后,就可以在爬虫里使用它们了,并把它们传入pipeline保存。
在这里定义好后,还要去spider里引用

item = HotelItem()

然后再使用

Nickname = pl['value']['Comments'][q]['CommentUser']['NickName']
item['name'] = Nickname.encode('utf-8')

传完一次后要 yield item 或者return item 一下

pipeline文件

管道文件就是把你设定好的item项按你指定的方式进行存储的文件,同样引入需要的模块后,编写类下面的process_item函数

class HotelPipeline(object):
    def process_item(self, item, spider):
        a = item['hn'].encode('gbk')
        conn = MySQLdb.connect(host="127.0.0.1", user="root", passwd="199855pz", db="pz", charset='utf8')
        print '连接成功'
        cursor = conn.cursor()
        insert_hotel = ("INSERT INTO hotel(name , time , con , room , score)" "VALUES(%s,%s,%s,%s,%s)")
        data_hotel = (item['name'], item['time'], item['con'], item['room'], item['score'])
        cursor.execute(insert_hotel, data_hotel)
        conn.commit()
        with open('%s.txt'%a, 'a') as f:
            f.write(item['name'] + '\n')
            f.write(item['time'] + '\n')
            f.write(item['con'] + '\n')
            f.write(item['room'] + '\n')
            f.write(item['score'] + '\n')
        return item

setting文件

设置好上面的两项后,再设置setting文件,让上面的两部操作起作用。
setting文件的内容都是自动生成好的,是注释,你需要调用的时候就去注释,相当于打开开关,需要更改的地方就去注释后自己改动。
在这里插入图片描述
这个是是否服从机器人协议,一般选不服从。因为如果你服从了,有些内容网页不允许爬虫这样的东西获取,你有可能就抓不到你想要的东西了。

在这里插入图片描述
这个是items的开关

最后,如果你觉得在命令行里操作不太方便,你可以自己再写一个py文件
在这里插入图片描述 运行这个文件就不用在命令行里操作了,运行过程和日志直接在控制台输出。