【Scrapy 五分钟撸网站】[旅游行业新闻]Scrapy实战北京旅游网全站数据抓取

目标网站介绍

北京旅游网 北京市文化和旅游局监管的非营利性网站,提供国内最权威的北京旅游信息,面向国内外来京旅游的游客提供全面的北京旅游指南、北京旅游投诉、旅游问答以及北京…
在这里插入图片描述

开始Scrapy

数据采集准备

1. 不了解5分钟快速抓网站思路的小伙伴先看
【Scrapy 五分钟撸网站】全站数据必备基础知识

2. 不了解数据抓取业务管理整理小伙伴先看
【Scrapy 五分钟撸网站】爬虫目标整理和数据准备

3. 不了解Scrapy模板量产的小伙伴先看(必看)
【Scrapy 五分钟撸网站】数据抓取项目框架通用模板

数据整理结果

1. Excel保存截图
在这里插入图片描述

模板套用

Spider下的<项目>.py文件

1. 创建spider项目

scrapy genspider www_visitbeijing_com_cn " "

2. 整理全站css样式
先来看下页面的CSS样式,全站统总计3种样式。两种API的JSON格式,一种常规格式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 修改 www_visitbeijing_com_cn.py 的的内容

这里将需要修改的地方进行说明,其他地方参考模板,不需修改。

  • 作用域&自定义说明
    allowed_domains = []
    web_name = "北京旅游网"
  • 添加抓取数据信息
    start_menu = [
        # 购物
        [
            {
    
    "channel_name": "购物-购物攻略", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/3lz9bx5k", },
            {
    
    "channel_name": "购物-商家信息", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/19iere7b", },
        ],
        # 美食
        [
            {
    
    "channel_name": "美食-潮流美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/2gmxkd2a", },
            {
    
    "channel_name": "美食-地方美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/n0bvf6k2", },
            {
    
    "channel_name": "美食-老北京美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/rlwk9pq8", },
            {
    
    "channel_name": "美食-美食资讯", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/18xr1f7c", },
            {
    
    "channel_name": "美食-异域美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/lhyv22zr", },
        ],
        # 视频
        [
            {
    
    "channel_name": "视频-北京故事", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/lYIcryRt", },
            {
    
    "channel_name": "视频-京郊游玩", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/8UuPRmMl", },
            {
    
    "channel_name": "视频-特色美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/Hszvxnoz", },
            {
    
    "channel_name": "视频-游记攻略", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/Jx96mrZo", },
            {
    
    "channel_name": "视频-展演视频", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/m12rdtUw", },
        ],
        # 文化
        [
            {
    
    "channel_name": "文化-创新文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/X6ShiQDg", },
            {
    
    "channel_name": "文化-古都文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/UfLNxEFA", },
            {
    
    "channel_name": "文化-红色文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/GqJjEBWR", },
            {
    
    "channel_name": "文化-京味文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/MT7zkjsv", },
            {
    
    "channel_name": "文化-特色文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/hzuUSDSi", },
            {
    
    "channel_name": "文化-演出", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/VsGq9Qv2", },
            {
    
    "channel_name": "文化-影视", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/5qMQ0xSf", },
            {
    
    "channel_name": "文化-阅读", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/LYZP6P7M", },
            {
    
    "channel_name": "文化-展览", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/DXxAEzhZ", },
        ],
        # 游玩
        [
            {
    
    "channel_name": "游玩-北京故事", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/8gez50vw", },
            {
    
    "channel_name": "游玩-城区游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/4eek55dr", },
            {
    
    "channel_name": "游玩-京郊游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/enrbw8do", },
            {
    
    "channel_name": "游玩-特色主题游-古都文化游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/judrtkbd", },
            {
    
    "channel_name": "游玩-特色主题游-红色旅游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/l5tf071h", },
            {
    
    "channel_name": "游玩-特色主题游-科教游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/8ubc2gc4", },
            {
    
    "channel_name": "游玩-特色主题游-体育游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/jtquifc7", },
            {
    
    "channel_name": "游玩-特色主题游-文创艺术游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/4g6nqzpv", },
            {
    
    "channel_name": "游玩-特色主题游-休闲度假游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/6th3pk42", },
            {
    
    "channel_name": "游玩-特色主题游-长城游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/fcj713ds", },
            {
    
    "channel_name": "游玩-特色主题游-中医养生游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/5c9yssil", },
            {
    
    "channel_name": "游玩-游玩资讯", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/bwzg2a22", },
        ],
        # 住宿
        [
            {
    
    "channel_name": "住宿-京郊度假村", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/ce682gi3", },
            {
    
    "channel_name": "住宿-酒店", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/ie1974su", },
            {
    
    "channel_name": "住宿-民宿", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/njfs2cb7", },
            {
    
    "channel_name": "住宿-农家院", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/70rbttge", },
            {
    
    "channel_name": "住宿-特色住宿", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/1p2ze2jm", },
        ],
        # 环游号
        [
            {
    
    "channel_name": "环游号", "url": "http://mp.visitbeijing.com.cn/api/article/list/recommend", },
            {
    
    "channel_name": "环游号-游玩", "url": "http://mp.visitbeijing.com.cn/api/article/list/play", },
            {
    
    "channel_name": "环游号-美食", "url": "http://mp.visitbeijing.com.cn/api/article/list/food", },
            {
    
    "channel_name": "环游号-住宿", "url": "http://mp.visitbeijing.com.cn/api/article/list/house", },
            {
    
    "channel_name": "环游号-购物", "url": "http://mp.visitbeijing.com.cn/api/article/list/shopping", },
            {
    
    "channel_name": "环游号-娱展演", "url": "http://mp.visitbeijing.com.cn/api/article/list/ent", },
            {
    
    "channel_name": "环游号-行业", "url": "http://mp.visitbeijing.com.cn/api/article/list/industry", },
        ],
        # 旅游图片
        [
            {
    
    "channel_name": "旅游图片", "url": "http://s.visitbeijing.com.cn/html/pic-6-1.shtml", },
        ],
    ]
  • 样式整理

整体网站数据列表有多少种样式就要做多少个parseX,并添加到

        parse_list = [
            self.parse1,  # 购物
            self.parse1,  # 美食
            self.parse1,  # 视频
            self.parse1,  # 文化
            self.parse1,  # 游玩
            self.parse1,  # 住宿
            self.parse2,  # 环球号
            self.parse3,  # 旅游图片
        ]
  • 标题&链接&封面
    由于整体网站内容列表没有图片因此不使用Item_thumbImg
# 样式1
        html = response.body.decode('utf-8')
        db = json.loads(html)

       item['title'] = i['title'].strip()  # 内容标题
       item['url'] = "http://www.visitbeijing.com.cn/a1/" + i['id']  # 拼接正文url

# 样式2
        html = response.body.decode('utf-8')
        db = json.loads(html)
		
		item['title'] = i['title'].strip()  # 内容标题
        item['url'] = "http://mp.visitbeijing.com.cn/a1/" + i['id']  # 拼接正文url
# 样式3
        Item_title = response.xpath('//div[@class="tao"]/a/@title').extract()  # 文章标题列表
        Item_url = response.xpath('//div[@class="tao"]/a/@href').extract()  # 文章链接列表
        Item_thumbImg = response.xpath('//div[@class="tao"]/a/img/@src').extract()  # 文章封面图片列表

Spider下的parse_detail.py文件

1. 抓取详情页内容

修改列表数据详情页的CSS抓取样式,总结了2种样式。
在这里插入图片描述

    # 处理详情页带格式,这里整个页面进行抓取
    	item['content'] = ""
        if 'class="mod-content"' in response.text and len(None2Str(item['content'])) < 5:
            item['content'] = response.xpath('//div[@class="mod-content"]').extract_first()
        if 'id="Article"' in response.text and len(None2Str(item['content'])) < 5:
            item['content'] = response.xpath('//div[@id="Article"]').extract_first()

2. 特别说明

有些网站的程序员丧心病狂到一定程度10个页面9种样式这种,由于我们不可能每个页面都打开看一下详情页的CSS格式,因此有个通用的解决办法。

  • 第一次抓取完内容之后打开MongoDB数据库执行下面的命令会把包含body的页面数据筛选出来,这些是没有根据指定样式抓取的数据,而是直接抓的全部页面的数据。
db.你的表名.find({content:/body/})

在这里插入图片描述

  • 打开任意的link循环处理详情页的内容直到mongo命令没有筛选出来内容为止即可。

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/114079922