Scrapy+MySQL爬取去哪儿网

Scrapy+MySQL爬取去哪儿网Scrapy MySQL 爬取去哪儿旅游 超详细 scrapy 去哪儿

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

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



一、初始化Scrapy框架

打开cmd或者powershell,然后输入scrapy startproject+你的项目名
在这里插入图片描述
然后 cd 到你项目名的下级目录之后再输入以下命令,scrapy genspider+名字+你要爬取网站的域名【!!!注意一定是域名,而不是URL

在这里插入图片描述
到这里之后,我们的Scrapy就初始化成功了!

二、编写代码

1.items.py

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

import scrapy class 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 scrapy from QunarTravel.items import QunartravelItem class QunarSpider(scrapy.Spider): name = 'Qunar' allowed_domains = ['travel.qunar.com'] start_urls = ['http://travel.qunar.com/'] urls = "https://travel.qunar.com/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条内容中有一个确实就会导致整篇文章爬取失败 continue print(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 interface from itemadapter import ItemAdapter class QunartravelPipeline: def process_item(self, item, spider): return item class 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"]]) self.db.commit() return item def open_spider(self,spider): self.db = pymysql.connect(host="127.0.0.1",user="root",password="",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 rules ROBOTSTXT_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格式的文件哦。
在这里插入图片描述
到这里我们的教程就结束了,如果其中有什么问题欢迎在评论区交流,欢迎多多指教!!!

今天的文章 Scrapy+MySQL爬取去哪儿网分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-10 12:21
下一篇 2024-12-10 12:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/82724.html