赞
踩
更多优秀文章借鉴:
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条数据,如下图所示:
注意:需要完整源代码请私聊博主哦~
创作不易,请点个赞哦~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。