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

 更多优秀文章借鉴:

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

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

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

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

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

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

导航小助手

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条数据,如下图所示:

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

创作不易,请点个赞哦~

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
引用: python爬取携程景区用户评论(爬虫时遇到翻页但url不变问题时的解决办法) python爬取携程景区用户评论Ajax页面加载的页面和普通页面的不同解决办法效果。引用[2]:前两天想要爬取携程上景区的用户评论,但是却发现用户评论在翻页时,页的url却不变,这就造成我们无法用简单的request.get()访问其他页面获取内容了。经过查阅资料发现这是一个通过Ajax页面加载的页面。具体Ajax页面加载的页面是什么这里不加以解释,本文只关于如何爬取这样的站。本文以黄鹤楼景区为例。携程黄鹤楼景区链接 Ajax页面加载的页面和普通页面的不同。 要爬取携程游客评论黄鹤楼,你可以使用Python编写一个爬虫程序。首先,你需要确定黄鹤楼景区的携程址。然后,你可以使用Python的requests库来发送GET请求,并使用BeautifulSoup库来解析页内容。根据你提供的引用,黄鹤楼的用户评论是通过Ajax页面加载的,这意味着评论内容可能不会直接显示在初始加载的页上。 为了获取所有评论,你需要模拟浏览器中的请求,通过发送POST请求来触发加载更多评论的操作。你可以在开发者工具中查找到相应的址和请求参数。使用requests库发送POST请求,并将参数传递给它,以获取新加载的评论。 当你成功获取到所有评论后,你可以使用正则表达式或BeautifulSoup库来提取评论的具体内容。根据页面的结构,你可以使用标签、class、id等属性来定位评论所在的HTML元素,并提取出评论文本。 以下是一个简单的示例代码,展示了如何爬取携程游客评论黄鹤楼的部分内容: ```python import requests from bs4 import BeautifulSoup url = "https://xxx" # 替换为黄鹤楼携程址 # 发送GET请求获取初始页内容 response = requests.get(url) html = response.text # 解析页内容 soup = BeautifulSoup(html, "html.parser") # 提取评论内容 comments = soup.find_all("div", class_="comment-text") # 替换为具体的评论内容标签和属性 for comment in comments: print(comment.text.strip()) # 输出评论文本 # 发送POST请求获取更多评论 # ... ``` 这是一个基本的示例,你可以根据实际情况进行调整和完善。请注意,具体的页结构和加载方式可能因站的更新而有所变化,你需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值