1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Scrapy+MySQL爬取去哪儿网

Scrapy+MySQL爬取去哪儿网

时间:2020-01-20 13:47:11

相关推荐

Scrapy+MySQL爬取去哪儿网

Scrapy+MySQL爬取去哪儿旅游【超详细!!!】

基于Python语言,利用Scrapy框架爬取信息,并持久化存储在MySQL


文章目录

Scrapy+MySQL爬取去哪儿旅游【超详细!!!】一、初始化Scrapy框架二、编写代码1.items.py2.spiders/Qunar.py3.pipelines.py4.setting.py运行程序

一、初始化Scrapy框架

打开cmd或者powershell,然后输入scrapy startproject+你的项目名

然后 cd 到你项目名的下级目录之后再输入以下命令,scrapy genspider+名字+你要爬取网站的域名【!!!注意一定是域名,而不是URL

到这里之后,我们的Scrapy就初始化成功了!

二、编写代码

1.items.py

定义你待会需要爬取的字段,代码如下:

import scrapyclass QunartravelItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()Title = scrapy.Field()TravelLink = scrapy.Field()Date = scrapy.Field()Days = scrapy.Field()Photo_Nums = scrapy.Field()Fee = scrapy.Field()People = scrapy.Field()Places = scrapy.Field()Views = scrapy.Field()Love = scrapy.Field()Comment = scrapy.Field()# Title:文章标题# TravelLink:标题的链接# Date:出发日期# Days:旅游共几天# Photo_Nums:照片数量# Fee:人均消费# People:适合人数# Places:途径地点# Views:评论人数# Love:点赞数# Comment:评论数

2.spiders/Qunar.py

这个文件在spiders的文件夹下的py文件,用于编写爬取网站信息的代码,我这里用的简单的xpath即可获取网页对应字段信息,代码如下:

import scrapyfrom QunarTravel.items import QunartravelItemclass QunarSpider(scrapy.Spider):name = 'Qunar'allowed_domains = ['']start_urls = ['/']urls = "/travelbook/list.htm?page={}&order=hot_heat"def start_requests(self):for i in range(1,201):url = self.urls.format(i)yield scrapy.Request(url=url,callback=self.parse)def parse(self, response):item = QunartravelItem()for info,num in zip(response.xpath('//li[@class="list_item "]'),range(1,2000)):try:item['Title'] = info.xpath('.//h2[@class="tit"]/a/text()').extract()[0]item['TravelLink'] = info.xpath('.//h2[@class="tit"]/a/@href').extract()[0]item['Date'] = info.xpath('.//p[@class="user_info"]/span[1]/span[@class="date"]/text()').extract()[0]item['Days'] = info.xpath('.//p[@class="user_info"]/span[1]/span[@class="days"]/text()').extract()[0]item['Photo_Nums'] = info.xpath('.//p[@class="user_info"]/span[1]/span[@class="photo_nums"]/text()').extract()[0]item['Fee'] = info.xpath('.//p[@class="user_info"]/span[1]/span[@class="fee"]/text()').extract()[0]item['People'] = info.xpath('.//p[@class="user_info"]/span[1]/span[@class="people"]/text()').extract()[0]item['Places'] = info.xpath('.//p[@class="places"]/text()').extract()[0]item['Views'] = info.xpath('.//p[@class="user_info"]/span[2]/span[@class="icon_view"]/span/text()').extract()[0]item['Love'] = info.xpath('.//p[@class="user_info"]/span[2]/span[@class="icon_love"]/span/text()').extract()[0]item['Comment'] = info.xpath('.//p[@class="user_info"]/span[2]/span[@class="icon_comment"]/span/text()').extract()[0]print("第{}条记录爬取成功".format(num))except IndexError:print("第{}条记录爬取失败".format(num))#提示每一页的第几条记录爬取失败,上面的11条内容中有一个确实就会导致整篇文章爬取失败continueprint(item)yield item

start_requests的方法是用于拼接不同页码的URL然后进行发送请求。

parse的方法则是用于编写爬取信息的代码。

在这里我们可以看到一个li标签是对应一篇文章的全部内容的,所以我们可以设置这个li标签的XPath路径为for循环的列表,这样我们编写for循环之后就会循环爬取每一篇文章字段里面的内容。

for循环里面内容的Xpath路径最好是相对路径,就是相对于刚刚li标签的路径。

最后这个yield item是将item的数据返回给通道(pipelines),下面我会讲这个pipelines的作用。


3.pipelines.py

这里主要是编写将数据存入MySQL的代码,先上代码:

import pymysql# useful for handling different item types with a single interfacefrom itemadapter import ItemAdapterclass QunartravelPipeline:def process_item(self, item, spider):return itemclass QunartravelMysqlPipeline:def process_item(self,item,spider):sql_insert = "insert into qunar values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"self.cur.execute(sql_insert,[item["Title"],item["TravelLink"],item["Date"],item["Days"],item["Photo_Nums"],item["Fee"],item["People"],item["Places"],item["Views"],item["Love"],item["Comment"]])mit()return itemdef open_spider(self,spider):self.db = pymysql.connect(host="127.0.0.1",user="root",password="123456",port=3306,database="qunarnet",charset="utf8")self.cur = self.db.cursor()def close_spider(self,spider):self.db.close()self.cur.close()

process_item的方法主要是编写SQL语句,并且将刚刚Qunar.py传过来的数据通过SQL语句提交到数据库中

而open_spider则是负责连接MySQL数据库,close_spider最后就是关闭数据库连接和关闭游标。

这里我们要注意一下的就是,MySQL和MongoDB不一样的是,MySQL需要事先创建好数据库和表,还有设置好表里的字段等等,不然会导致报错!!!

4.setting.py

最后稍微设置一下就大功告成了!!!先上代码:

第一

# Obey robots.txt rulesROBOTSTXT_OBEY = False

第二,请求头

DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',}

第三,pipelines的设置,第二行设置的数字一定要比第一行小,不然不会存入MySQL!!!

ITEM_PIPELINES = {'QunarTravel.pipelines.QunartravelPipeline': 300,'QunarTravel.pipelines.QunartravelMysqlPipeline': 200,}

运行程序

最后我们只需要在命令行中输入scrapy crawl Qunar回车!

就可以通过我们的Navicat中看到我们爬取的内容啦!!!

同时,我们也可以在命令行中输入scrapy crawl Qunar -o Qunar.csv就可以自动生成csv格式的文件,同时也可以生成json,xml格式的文件哦。

到这里我们的教程就结束了,如果其中有什么问题欢迎在评论区交流,欢迎多多指教!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。