用scrapy抓取qunar门票信息 作者: nbboy 时间: 2019-11-20 分类: Python # 概述 水文一篇,本来想把scrapy做成一个系列,不过最近还是比较忙,等有空的时候,就工作中遇到的反爬机制说一下。这次说的是爬取qunar网站的景点信息,并且存储到mongodb中。在说一遍,python做爬虫是真的方便,指的是爬虫的前端部分。 # 准备工作 - 创建项目 ```python scrapy startproject ticket_spiders ``` - 创建爬虫 ```python scrapy genspider qunar qunar.com ``` # 制定爬取规则 通过分析网页我们找到了爬取qunar景区的入口接口,http://piao.qunar.com/ticket/list.json?keyword=浙江®ion&page=151&from=mps_search_suggest ,这里为了做演示,只爬取浙江的景区。起始URL填写为到start_urls中,因为内容返回为JSON的,所以解析步骤相对来说简单多了,直接解析为JSON对象就可以。在做了简单的判断之后,我们把抽取到的数据发往pipeline就可以了。 ```python result = json.loads(response.text) if 'ret' in result and result['ret'] == True: data = result['data'] oldKeyword = data['keyword'] if oldKeyword == '浙江': sightList = data['sightList'] if sightList: for sight in sightList: yield QunarItem(**sight) ``` # 分页规则 爬虫的分页规则每个爬虫都不一样,针对我们今天的爬虫而言,我们只要让他一页一页翻下去就可以了。parse函数里的代码: ```python def parse(self, response): page = response.meta.get('page', 151) self.logger.info('current page {page}'.format(page=page)) result = json.loads(response.text) if 'ret' in result and result['ret'] == True: data = result['data'] oldKeyword = data['keyword'] if oldKeyword == '浙江': sightList = data['sightList'] if sightList: for sight in sightList: yield QunarItem(**sight) nextPage = page + 1 yield scrapy.Request( url='http://piao.qunar.com/ticket/list.json?keyword=%E6%B5%99%E6%B1%9F®ion&from=mps_search_suggest&page=' + str( nextPage), callback=self.parse, meta={'page': nextPage}) else: self.logger.error('被限制爬行了') ``` # 制定处理规则 到了这步,我们已经有数据了,接下来该清洗的清洗,该处理的处理,该存储的存储,这次爬虫目标很简单,就是把数据全部存储起来就可以。 ```python import pymongo mongoClint = pymongo.MongoClient('127.0.0.1', 27017) dbQunar = mongoClint['qunar'] collection = dbQunar['sight'] class QunarPipeline(object): def process_item(self, item, spider): collection.insert_one(item._values) return item ``` # 全局配置 上面那步写好了处理器,但是并没有进行挂接,这步我们进行挂接,在settings.py文件里,更改处理器配置参数如下: ```python ITEM_PIPELINES = { 'ticket_spiders.pipelines.QunarPipeline': 300, } ``` # 运行和结果 ```shell scrapy crawl qunar ``` 执行后就可以得到最终抓取的结果,嗯,挺有满足感的,下面可以用这些数据进行分析或者展示了。  # 总结 scrapy作为抓取引擎既简单又强大,简单是说他其实封装了很多复杂的机制和概念,下次我带领大家从源码角度去了解这个框架。学习一门技术要从根本上,特别是源码角度或者是核心模型角度去了解其实现,才能从瞬息万变的技术变革中以不变应万变,以此和读者共勉。 标签: scrapy, 爬虫, qunar, mongodb
评论已关闭