【网络爬虫篇】使用Scrapy爬取去哪儿网游记数据并保存(超详细)

 更多优秀文章借鉴:

1. 使用Selenium实现黑马头条滑块自动登录

2. 使用多线程采集爬取豆瓣top250电影榜

3. 使用Scrapy爬取去哪儿网游记数据 

4. 数据采集技术综合项目实战1:国家水稻网数据采集与分析

5. 数据采集技术综合项目实战2:某东苹果15数据采集与分析

6. 数据采集技术综合案例实战3:b站弹幕采集与分析

7. 逆向实战—京东:滑块验证码(逆向登录)

导航小助手

1. 目标网址:

2. 准备工作:

3. 思路分析:

4. 编写相关的爬虫框架规则:


目标网址:

https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat

准备工作:

1.按住按win+r,在弹出框里输入cmd。

2.进入下图界面,默认为C盘,使用cd \d +目标路径即可进入自己指定的文件夹下。

3.在自己指定的文件夹下输入scrapy startproject qunar,利用scrapy框架创建qunar文件。

4.切换到项目qunar的根目录,输入命令:scrapy genspider qunarspider https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat

以爬虫起始地址创建脚本文件,用于编写采集规则。如下图所示:

3.创建好后如下图所示,表示爬虫基本框架已经搭建完毕,即可写入脚本以及相应的爬虫规则。

思路分析:

1.打开去哪网游客博主发布游记主页面,通过谷歌开发者工具可观察到每一条记录都在"li"标签下面;目标字段有标题、作者、时间、人均费用等。

结论:观察可得到,当前网页以page进行分页,且每一个li标签存储着每一篇游记的相关信息。

2.打开网页源代码,搜索相关关键信息:

结论:观察得出,此网页为静态网页,可直接利用正则表达式、Xpath等解析方式通过返回源代码直接获取相关信息。

编写相关的爬虫框架规则:

1.在items.py中确定提取的相关字段:

import scrapy

class QunarItem(scrapy.Item):
    Title = scrapy.Field() # Title:文章标题
    Comment = scrapy.Field()# Comment:作者名称
    TravelLink = scrapy.Field()# TravelLink:标题的链接
    Date = scrapy.Field()# Date:出发日期
    Days = scrapy.Field() # Days:旅游共几天
    Photo_Nums = scrapy.Field()# Photo_Nums:照片数量
    Fee = scrapy.Field()# Fee:人均消费
    People = scrapy.Field()# People:适合人数
    Places = scrapy.Field()# Places:途径地点
    Views = scrapy.Field()# Views:评论人数
    Love = scrapy.Field() # Love:点赞数
    pass

2.在setting.py中确定相关爬取规则:

BOT_NAME = "Qunar"
SPIDER_MODULES = ["Qunar.spiders"]
NEWSPIDER_MODULE = "Qunar.spiders"
REDIRECT_ENABLED = False

#不遵守爬虫协议
ROBOTSTXT_OBEY = False

#设置等待时间,降低爬虫频率
DOWNLOAD_DELAY = 3

#引入用户代码,Cookie等设置请求头
DEFAULT_REQUEST_HEADERS = {
   "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
   "Accept-Language": "en",
   'Cookie':'xxx',
   'User-Agent':'xxx'
}

#打开存储通道
ITEM_PIPELINES = {
   "Qunar.pipelines.QunarPipeline": 300,
}

3.在pipelines.py中设置存储方式,这里使用MongoDB进行存储:

class QunarPipeline:
    def __init__(self):
        # 打开数据库,建立集合
        self.client=pymongo.MongoClient('localhost',27017)
        self.db=self.client['clj2']
        self.Qunar_text=self.db['Qunar_text']

    def process_item(self, item, spider):
        adapter=ItemAdapter(item)
        data=adapter.asdict()
        self.Qunar_text.insert_one(data)
        return item

4.在Qunarspider.py脚本中写入获取信息的主代码:

import time#引入time库,降低访问频率
import scrapy#引入爬虫框架scrapy库
from scrapy.selector import Selector#引用Selector方法,对目标response进行解析
from ..items import QunarItem#从父目录中导入QunarItem
class QunarSpider(scrapy.Spider):#编写QunarSpider类
    name = 'Qunarspider'#唯一名字
    # allowed_domains = ['travel.qunar.com']
    start_urls = ['https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat']#基地址
    def parse(self, response):
        selector=Selector(response)#对目标返回的response进行解析
        item = QunarItem()#将在items.py定义好的相关字段赋值给变量item
        infos=selector.xpath('//li[starts-with(@class,"list_item")]')#找到循环点,此处为记录每一条游记的标签
        for info in infos:#进行循环
            #经过大量实验可知,某些游记也许存在空值,为了程序的正常运行,则进行抛出异常处理
            
            # 以获取标题为例:
            try:
                Title = info.xpath('.//h2[@class="tit"]/a/text()').extract()[0]#返回利用xpath已获取Title列表中的第一个元素
                item['Title']=Title#赋值
                
                time.sleep(1)#休息一秒
                #回调item,对items.py中的字段进行赋值
                yield item
            except IndexError:
                pass
            urls=['https://travel.qunar.com/travelbook/list.htm?page={}&order=hot_heat'.format(str(i))for i in range(2,201)]#对目标网站进行字符串格式化
            for url in urls:#循环
                yield scrapy.Request(url)#利用循环的urlparse回调函数

5.控制台输出每一页爬取的游记博主发布的游记信息,正常运行:

6.打开MongoDB数据库的Qunar_text集合,如下图所示:

对数据进行导出为Csv格式,一共2000条数据,如下图所示:

注意:需要完整源代码请私聊博主哦~

创作不易,请点个赞哦~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值