查看原文
其他

我用Scrapy爬了各大城市的旅游数据后发现,最好玩的还是这里...

印象Python 2022-08-01

The following article is from GOGO数据 Author 是沐沐呀

文 |沐沐

来源:GOGO数据「ID: mu_science」


如下,创建scrapy项目:


结果如下:


需求分析



我们要爬取旅游网站的热门城市、旅游人数、热门景点、城市详情页面地址
然后将这些数据存储在MongoDB中。



页面分析


F12打开浏览器开发者模式,如下找到请求的url。



规律如下:
https://place.qyer.com/china/citylist-0-0-1/https://place.qyer.com/china/citylist-0-0-2/https://place.qyer.com/china/citylist-0-0-3/https://place.qyer.com/china/citylist-0-0-4/https://place.qyer.com/china/citylist-0-0-5/

最后的数字控制翻页,我们可以利用这个page参数获取
任意页数的数据

并且请求的url和网页的url一样也能说明我们请求的这是一个静态网站。


对于静态页面信息的获取我们一般采用xpath来获取,
我们鼠标右键 '检查', 找到页面信息所在位置。


可以看到,每一个城市的信息都在一个li标签之内
所以第一步,我们先获取到全部的li标签
然后循环获取标签内部信息。

分析至此,上代码~~


发送请求


item,定义我们要获取的信息

  travel_city = scrapy.Field()        #热门城市

  travel_numb = scrapy.Field()      # 旅游人数

  travel_hot = scrapy.Field()     # 热门景点

  travel_url = scrapy.Field()     # 城市详情页面地址

爬虫文件spider_travel,具体的爬虫方法的实现,前面提到过我们这里采用的是xpath来获取页面信息。

最后将获取到的信息抛给pipelines


# 实例化item对象
    item = TravelSummerItem()

    lis = response.xpath("//ul[@class='plcCitylist']/li")

    for li in lis:

        item['travel_city'] = li.xpath('./h3/a/text()').get()   # 城市名称

        item['travel_numb'] = li.xpath('./p[2]/text()').get()   # 旅游人数

        travel_hot = li.xpath('./p[@class = "pois"]/a/text()').getall()      # 热门城市
        travel_hot = [hot.strip() for hot in travel_hot]
        item['travel_hot'] = '、'.join(travel_hot)       # join()合并列表对象

        travel_url = li.xpath('./h3/a/@href').get()
        item['travel_url'] = 'https:' + travel_url           # 城市详情页面地址

        yield item
    '''
       香港   339046人去过 香港海洋公园、星光大道、维多利亚港、太平山、尖沙咀、金紫荆广场、香港迪士尼乐园、中环、弥敦道、兰桂坊、中银大厦、香港杜莎夫人蜡像馆、中环至半山自动扶梯、旺角、湾仔、黄大仙祠、铜锣湾、庙街、凌霄阁、重庆大厦 https://place.qyer.com/hong-kong/
        澳门   200297人去过 澳门大三巴牌坊、大炮台、议事亭前地、玫瑰堂、官也街、妈阁庙、氹仔岛、澳门渔人码头、民政总署大楼、大三巴街、澳门博物馆、金莲花广场、岗顶前地、玛嘉烈蛋挞店、澳门旅游塔、龙环葡韵住宅式博物馆、东望洋炮台、圣若瑟修院及圣堂、黑沙海滩、妈祖像 https://place.qyer.com/macau/
        台北   134250人去过 台北故宫博物院、台北101大楼、西门町、中正纪念堂、士林夜市、国父纪念馆、士林官邸、台北总统府、台北车站、阳明山国家公园、红楼创意市集、西门红楼、阿宗面线、猫空站、龙山寺、师大夜市、北投温泉博物馆、101觀景台、松山文创园区、饶河街观光夜市 https://place.qyer.com/taipei/
        台湾   112519人去过 台北故宫博物院、台北101大楼、西门町、中正纪念堂、士林夜市、国父纪念馆、垦丁大街、鹅銮鼻公园、士林官邸、鹅銮鼻灯塔、九份老街、七星潭、台北总统府、船帆石、清水断崖、六合夜市、日月潭、高雄捷运美丽岛站(光之穹顶)、打狗英国领事馆、台湾最南点碑 https://place.qyer.com/taiwan/
        北京   87876人去过 故宫、颐和园、圆明园、天安门广场、北京野生动物园、北京欢乐谷、恭王府、天坛、北京汽车博物馆、北海公园、北京动物园、中国科学技术馆、北京杜莎夫人蜡像馆、南锣鼓巷、景山公园、北京海洋馆、世界公园、香山公园、富国海底世界、雍和宫 https://place.qyer.com/beijing/
        上海   84843人去过 东方明珠、上海野生动物园、上海海洋水族馆、上海科技馆、上海杜莎夫人蜡像馆、上海海昌海洋公园、豫园、上海长风海洋世界、上海动物园、城隍庙旅游区、顾村公园、上海自然博物馆、金茂大厦、银行博物馆、东方绿舟、上海汽车博物馆、中国航海博物馆、浦东开发陈列馆、上海海湾国家森林公园、新天地 https://place.qyer.com/shanghai/
        成都   77823人去过 成都大熊猫繁育研究基地、宽窄巷子、武侯祠、杜甫草堂、金沙遗址博物馆、成都海昌极地海洋公园、成都欢乐谷、成都动物园、春熙路、蜀风雅韵川剧院、国色天乡童话世界、浩海立方海洋馆、文殊院、秀丽东方、青羊宫、松鼠部落森林假日公园、中国泰迪熊博物馆、漫花庄园、天府熊猫塔、四川博物院 https://place.qyer.com/chengdu/
        广州   75927人去过 长隆野生动物世界、广州塔、长隆欢乐世界、珠江夜游、岭南印象园、沙面、宝墨园、正佳极地海洋世界、百万葵园、黄石公园、珠江夜游天字码头、中国科学院华南植物园、陈家祠、从化碧水湾温泉、珠江夜游广州塔码头、越秀公园、珠江夜游大沙头码头、上下九步行街、广州动物园、石室圣心大教堂 https://place.qyer.com/guangzhou/
        南京   72126人去过 中山陵景区、牛首山文化旅游区、红山森林动物园、南京海底世界(尧泰汉海集团)、钟山风景名胜区、大报恩寺遗址公园、瞻园、秦淮河画舫、夫子庙秦淮河风光带、美龄宫、珍珠泉风景区、外秦淮河画舫、六朝博物馆、鸡鸣寺、江宁织造博物馆、圣保罗教堂、梅花山、雨花台、南京长江大桥、夫子庙大成殿 https://place.qyer.com/nanjing/
        杭州   72067人去过 杭州灵隐(飞来峰)景区、灵隐寺、杭州动物园、西湖游船、岳王庙景区、胡雪岩故居、三潭印月、虎跑公园、杭州海底世界、清河坊街、京杭大运河、花港观鱼、白堤、南宋御街、云栖竹径、大喇叭、杭州云曼温泉、纪念公园、杭州植物园、钱塘江 https://place.qyer.com/hangzhou/
        厦门   69089人去过 厦门大学、胡里山炮台、环岛路、曾厝垵、南普陀寺、厦门园林植物园、厦门科技馆、厦门方特梦幻王国、中山路步行街、鹭江夜游、钟鼓索道、帆汇帆船出海体验、灵玲马戏城、环岛观光巴士、云上厦门观光厅、观音山梦幻海岸、厦门方特东方神画、鼓浪屿、厦门园林博览苑、集美学村 https://place.qyer.com/xiamen/
        深圳   66529人去过 世界之窗、东部华侨城、深圳欢乐谷、锦绣中华民俗文化村、深圳野生动物园、东部华侨城大侠谷、南澳、地王观光、东部华侨城茶溪谷、大梅沙海滨公园、青青世界、欢乐海岸海洋奇梦馆、鬼屋、观澜山水田园旅游文化园、光明农场大观园、小梅沙、天坛、深圳欢乐海岸、海上田园、西冲 https://place.qyer.com/shenzhen/
        重庆   63837人去过 长江索道、解放碑步行街、重庆园博园、黑山谷风景区、重庆欢乐谷、梦幻奥陶纪景区、汉海海洋公园、重庆统景温泉风景区、酉阳桃花源、渣滓洞、云阳龙缸国家地质公园、融汇温泉城、四面山、丰都鬼城、白帝城景区、重庆动物园、金源方特科幻公园、朝天门广场、南山植物园、欢乐海底世界 https://place.qyer.com/chongqing/
        三亚   62169人去过 蜈支洲岛、天涯海角、亚龙湾热带天堂森林公园、南山文化旅游区、亚龙湾、三亚千古情景区、阿浪海鲜第一市场、西岛、亚特兰蒂斯失落的空间水族馆、大东海、大小洞天、亚特兰蒂斯水世界、三亚湾、南山寺、海棠湾、凤凰岭海誓山盟景区、夜游三亚湾、亚龙湾海底世界、海底漫步、速降 https://place.qyer.com/sanya/
        苏州   61164人去过 寒山寺、留园、山塘古街、华谊兄弟电影世界、苏州古运河、四季悦水游村、苏州博物馆、白马涧龙池景区、天池山、平江路历史街区、穹窿山、金鸡湖、诚品书店、观前街、苏州太湖国家湿地公园、苏州湾王焰温泉、沧浪亭、阳山温泉度假山庄、苏州上方山国家森林公园、金鸡湖游船 https://place.qyer.com/suzhou/

    '''


数据已经成功获取到了本地,接下来就是将数据持久化。
接下来我们的目的很简单,把数据存入mongodb。
 
 mongodb的下载传送门:
https://www.mongodb.com/try/download/community


直接点击download即可下载。

双击打开文件进行安装,在安装过程中,可以通过点击 "Custom(自定义)" 按钮来设置你的安装目录。



这里我选择安装在E:\MongoDB这个目录下(安装目录会影响我们后面的配置)。



这里选择直接next:



这里安装 "Install MongoDB Compass" 不勾选,

否则可能要很长时间都一直在执行安装,


MongoDB Compass是一个图形界面管理工具,这里不安装也是没有问题的,可以自己去下载一个图形界面管理工具,比如Robo3T



之后稍微等待一会就安装好了。


按照如下方式手动开启mongodb服务。


最新mongodb无需繁琐配置,去浏览器访问:
http://127.0.0.1:27017/

出现下图


证明MongoDB服务开启成功!

接下来我们就需要将数据存入mongodb。
进入到mongdb安装路径bin目录下,查看MongoDB 的端口号,

找到这一条 connectiong to mongodb://127.0.0.1:27017


然后到 settings 中写如下参数:


mongo_host = '127.0.0.1'mongo_port = 27017mongo_db_name = 'Travel'mongo_db_collection = 'Travel_data'

记得在pipeline中进行如下设置,导入设置的参数等。
 def __init__(self):
      host = mongo_host
      port = mongo_port
      dbname = mongo_db_name
      collection = mongo_db_collection
      client = pymongo.MongoClient(host=host, port = port)
      db = client[dbname]
      self.post = db[collection]

为方便起见,我们后续使用mongodb的可视化工具Studio 3T来查看数据,下载传送门在此:

https://studio3t.com/



傻瓜式安装,一路next。在此不再赘述,有问题的小伙伴可自行百度一下。
下载完成之后连接方式如下:


查看数据:



我们先来获取50页数据

  for page in range(150 + 1):
      url = f'https://place.qyer.com/china/citylist-0-0-{page}'
      yield scrapy.Request(url, callback=self.parse)


不得不说,Scrapy爬虫是真的快啊!


数据准备完毕,就下了就可以拿去做数据分析啦!

往期精彩回顾


上的什么班?我爱你的不一般!python最新微博爬取教程,看看十万网友怎么说?
python实战| 二手车难买?手把手带你爬取瓜子二手车-二级页面Python
电影荒吗?教你爬取豆瓣电影top250
Python骚操作,小视频已装满我硬盘!
西安租房历险记!
爬取斗鱼4300W热度的小姐姐是一种什么样的体验?
充气娃娃有多爽?Python告诉你
Scrapy爬取B站小姐姐入门教程,结果万万没想到!
Python实战| 9383字手把手教你使用多线程爬取瓜子二手车并且可视化展示!
战|腾讯招聘你干什么?python可视化告诉你
Python绘制饼表,帮你分析西安天气!
我是如何使用Python读取Excel并将其展示到web页面上?
5行代码,你也可以给心仪的小姐姐制作漫画头像!
西安租房哪里房源最多?python可视化爬虫告诉你!
Python绘制炫酷的西安地铁动图,你每天坐的是哪条线呢?
古天乐的吕布有多猛?Python爬虫可视化告诉你!
520快到了,是时候秀一下我的女朋友们了
动态网页实战| python爬虫+前端框架Bootstrap

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存