元旦旅游攻略。我帮你整理出来了!Python爬取穷游网

印象Python

共 6512字,需浏览 14分钟

 · 2020-12-25

点击上方蓝字关注我们


点击上方“印象python”,选择“星标”公众号
重磅干货,第一时间送达!


元旦快要来了就意味着假期快要来了。有没有计划好元旦去哪里散心呢?

今天就用爬虫带你分析以下国内最热门城市哪些值得你去~


首先我们的目标网站是穷游网。

https://place.qyer.com/china/citylist-0-0-1/
我们要抓取的数据是这些热门城市的名称、排行榜、旅游人次和旅游景点。


老规矩,爬虫四部曲:



1.找爬虫所在url地址(系统性的网页分析)
2.发送网络请求
3.数据解析(我们所需数据)
4.保存数据


1.找爬虫所在url地址(系统性的网页分析)
首先我们来分析网页属于动态加载还是静态加载。教你一招最简单的办法。

如上图找到浏览器设置,禁止javascript加载,如果网页还如先前一般正常显示即说明该网页于静态加载


2.咱们今天要分析的网站就属于一个静态加载。所以目标url就可以确定下来,即浏览器导航栏地址

url = https://place.qyer.com/china/citylist-0-0-1/

3.伪装成浏览器发送请求。为了防止网站反爬,我们需要对爬虫代码进行伪装,打开浏览器开发者模式可以看到网站发送请求时会携带这么多的参数。这里我们只需refer、user-agent(浏览器身份)进行伪装即可。


4.发送网络请求,需要数据请求模块requests模拟浏览器发送网络请求。
#m模拟浏览器发送网络请求resp = requests.get(url, headers = headers)html_data = resp.textprint(html_data)

返回的结果其实和我们在浏览器里面看到的其实是一样的。

5.数据的解析,打开浏览器的开发者模式发现这些城市的信息都位于一个个li元素标签中。也就是说一个li元素内就是一个城市的信息。而所有的li元素又都在一个叫做ul的父标签之内。

所以我们首先要提取到ul这个父标签的位置。


6.我们可以看到ul所在位置有一个class = 'plcCitylist'的属性。

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

7.获取到了所有li的位置之后我们就可以循环获取li标签里面的城市信息了。

for li in lis:    city_name = li.xpath('h3/a/text()').get() #城市名称    print(city_name)#香港  澳门  台北  台湾  北京  上海  成都  广州  南京  杭州  厦门  深圳  重庆  三亚  珠海


8.同样方法我们可以获取到城市名称、旅游人数、热门景点、城市图片和城市详情等情况。

travel_name = li.xpath('h3/a/text()').get() #城市名称    travel_no = 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]    travel_hot = '、'.join(travel_hot)  #join()合并列表对象    travel_url = li.xpath('h3/a/@href').get() #城市详情页面地址    travel_img = li.xpath('p/a/img/@src').get() #城市封面图片

结果打印如下:

香港   | 338157人去过 | 香港海洋公园、星光大道、维多利亚港、太平山、尖沙咀、金紫荆广场、香港迪士尼乐园、中环、弥敦道、兰桂坊、中银大厦、香港杜莎夫人蜡像馆、中环至半山自动扶梯、旺角、湾仔、黄大仙祠、铜锣湾、庙街、凌霄阁、重庆大厦 | //place.qyer.com/hong-kong/ | https://pic.qyer.com/album/user/213/10/Q0hWQxoGYg/index/cover澳门   | 199621人去过 | 澳门大三巴牌坊、大炮台、议事亭前地、玫瑰堂、官也街、妈阁庙、氹仔岛、澳门渔人码头、民政总署大楼、澳门威尼斯人、大三巴街、澳门博物馆、金莲花广场、岗顶前地、玛嘉烈蛋挞店、澳门旅游塔、龙环葡韵住宅式博物馆、东望洋炮台、圣若瑟修院及圣堂、黑沙海滩 | //place.qyer.com/macau/ | https://pic.qyer.com/album/user/1015/77/QElURx0AZE8/index/cover台北   | 133995人去过 | 台北故宫博物院、台北101大楼、西门町、中正纪念堂、士林夜市、国父纪念馆、士林官邸、台北总统府、台北车站、阳明山国家公园、红楼创意市集、西门红楼、阿宗面线、猫空站、龙山寺、师大夜市、北投温泉博物馆、101觀景台、松山文创园区、饶河街观光夜市 | //place.qyer.com/taipei/ | https://pic.qyer.com/album/user/2579/12/Q0xSSxsFaEA/index/cover台湾   | 112183人去过 | 台北故宫博物院、台北101大楼、西门町、中正纪念堂、士林夜市、国父纪念馆、垦丁大街、鹅銮鼻公园、士林官邸、鹅銮鼻灯塔、九份老街、七星潭、台北总统府、船帆石、清水断崖、六合夜市、日月潭、高雄捷运美丽岛站(光之穹顶)、打狗英国领事馆、台湾最南点碑 | //place.qyer.com/taiwan/ | https://pic.qyer.com/album/user/1849/7/QEFRSxoAaEA/index/cover北京   | 86280人去过 | 故宫、颐和园、圆明园、天安门广场、北京野生动物园、北京欢乐谷、恭王府、天坛、北京汽车博物馆、北海公园、北京动物园、中国科学技术馆、北京杜莎夫人蜡像馆、景山公园、南锣鼓巷、北京海洋馆、世界公园、香山公园、富国海底世界、世界花卉大观园 | //place.qyer.com/beijing/ | https://pic.qyer.com/album/user/1501/43/QExVQx4EZUg/index/cover上海   | 83144人去过 | 东方明珠、上海野生动物园、上海海洋水族馆、上海科技馆、上海杜莎夫人蜡像馆、上海海昌海洋公园、豫园、上海长风海洋世界、上海动物园、顾村公园、城隍庙旅游区、上海自然博物馆、金茂大厦、银行博物馆、东方绿舟、上海汽车博物馆、中国航海博物馆、浦东开发陈列馆、新天地、浦东第一图书馆 | //place.qyer.com/shanghai/ | https://pic.qyer.com/album/user/1500/96/QExVQhMBY08/index/cover成都   | 76439人去过 | 成都大熊猫繁育研究基地、宽窄巷子、武侯祠、杜甫草堂、金沙遗址博物馆、成都海昌极地海洋公园、成都欢乐谷、成都动物园、春熙路、蜀风雅韵川剧院、国色天乡童话世界、浩海立方海洋馆、文殊院、秀丽东方、青羊宫、松鼠部落森林假日公园、中国泰迪熊博物馆、漫花庄园、天府熊猫塔、四川博物院 | //place.qyer.com/chengdu/ | https://pic.qyer.com/album/user/1503/17/QExVQRsAYUg/index/cover广州   | 74870人去过 | 长隆野生动物世界、广州塔、长隆欢乐世界、长隆国际马戏大剧院、珠江夜游、岭南印象园、沙面、宝墨园、正佳极地海洋世界、百万葵园、黄石公园、珠江夜游天字码头、中国科学院华南植物园、从化碧水湾温泉、陈家祠、珠江夜游广州塔码头、越秀公园、珠江夜游大沙头码头、上下九步行街、广州动物园 | //place.qyer.com/guangzhou/ | https://pic.qyer.com/album/user/1503/16/QExVQRsBZkk/index/cover南京   | 71232人去过 | 中山陵景区、牛首山文化旅游区、红山森林动物园、南京海底世界(尧泰汉海集团)、钟山风景名胜区、大报恩寺遗址公园、瞻园、秦淮河画舫、夫子庙秦淮河风光带、美龄宫、珍珠泉风景区、外秦淮河画舫、六朝博物馆、江宁织造博物馆、鸡鸣寺、圣保罗教堂、梅花山、雨花台、南京长江大桥、灵谷景区 | //place.qyer.com/nanjing/ | https://pic.qyer.com/album/user/861/28/SU9UQBIAYg/index/cover杭州   | 70880人去过 | 西溪国家湿地公园、杭州灵隐(飞来峰)景区、灵隐寺、杭州动物园、西湖游船、岳王庙景区、胡雪岩故居、三潭印月、虎跑公园、杭州海底世界、清河坊街、京杭大运河、花港观鱼、白堤、南宋御街、云栖竹径、大喇叭、杭州云曼温泉、纪念公园、杭州植物园 | //place.qyer.com/hangzhou/ | https://pic.qyer.com/album/user/1503/18/QExVQRsPZ0A/index/cover厦门   | 68174人去过 | 厦门大学、胡里山炮台、环岛路、曾厝垵、南普陀寺、厦门园林植物园、厦门科技馆、厦门方特梦幻王国、中山路步行街、鹭江夜游、钟鼓索道、帆汇帆船出海体验、灵玲马戏城、环岛观光巴士、云上厦门观光厅、观音山梦幻海岸、厦门方特东方神画、厦门园林博览苑、集美学村、五缘湾帆船港 | //place.qyer.com/xiamen/ | https://pic.qyer.com/album/user/1161/21/QEhTQxgGZks/index/cover深圳   | 65677人去过 | 世界之窗、东部华侨城、深圳欢乐谷、锦绣中华民俗文化村、深圳野生动物园、香格里拉、东部华侨城大侠谷、南澳、地王观光、东部华侨城茶溪谷、大梅沙海滨公园、青青世界、欢乐海岸海洋奇梦馆、鬼屋、观澜山水田园旅游文化园、光明农场大观园、天坛、小梅沙、深圳欢乐海岸、海上田园 | //place.qyer.com/shenzhen/ | https://pic.qyer.com/album/user/1503/19/QExVQRsOYUE/index/cover重庆   | 62656人去过 | 长江索道、解放碑步行街、重庆园博园、黑山谷风景区、重庆欢乐谷、梦幻奥陶纪景区、汉海海洋公园、重庆统景温泉风景区、酉阳桃花源、云阳龙缸国家地质公园、渣滓洞、融汇温泉城、四面山、丰都鬼城、白帝城景区、重庆动物园、金源方特科幻公园、欢乐海底世界、南山植物园 | //place.qyer.com/chongqing/ | https://pic.qyer.com/album/user/1503/20/QExVQRgHYE0/index/cover三亚   | 60549人去过 | 蜈支洲岛、天涯海角、亚龙湾热带天堂森林公园、南山文化旅游区、鹿回头风景区、亚龙湾、三亚千古情景区、阿浪海鲜第一市场、西岛、亚特兰蒂斯失落的空间水族馆、大小洞天、大东海、亚特兰蒂斯水世界、三亚湾、南山寺、凤凰岭海誓山盟景区、海棠湾、夜游三亚湾、亚特兰蒂斯、亚龙湾海底世界 | //place.qyer.com/sanya/ | https://pic.qyer.com/album/user/861/28/SU9UQBIAaQ/index/cover珠海   | 60384人去过 | 珠海长隆海洋王国、珠海横琴·长隆国际海洋度假区、澳门环岛游、情侣路、长隆横琴岛剧院、珠海海泉湾海洋温泉、御温泉、珠海渔女、圆明新园、梦幻水城、海泉湾旅游度假区、港珠澳大桥、外伶仃岛、海滨公园、珠澳海湾游、海豚湾、东澳岛、梅溪牌坊、企鹅馆、普陀寺 | //place.qyer.com/zhuhai/ | https://pic.qyer.com/album/user/861/29/SU9UQBMGYA/index/cover

9.最后一步就是我们的数据保存了,我们需要导入python自带csv模块。然后将所有我们获取到的数据保存在 '穷游网数据.csv' 文件中
with open('穷游网数据.csv', mode='a',encoding='utf-8',newline='') as f:    csv_write = csv.writer(f)    csv_write.writerow([travel_name,travel_no,travel_hot, travel_url, travel_img])

来看打印结果:

穷游网数据.csv:


10.第一页的数据我们现在已经完美地保存下来了,接下来我们要获取剩下的170页数据。我们先来查看地址栏url规律
1页:https://place.qyer.com/china/citylist-0-0-1/2页:https://place.qyer.com/china/citylist-0-0-2/3页:https://place.qyer.com/china/citylist-0-0-5/171页:https://place.qyer.com/china/citylist-0-0-171/

发现只有地址栏末尾的数字随着页数在变化。所以我们加上一个简单的循环即可。
for i in range(171):    # 1.找爬虫所在url地址(系统性的网页分析)    url = 'https://place.qyer.com/china/citylist-0-0-{}/'.format(i)

好了到此为止所有爬虫部分已经完成,为了更友好的人际互动,我们再优化一下提示信息。
page = 0for i in range(171):    page+=1    print('--------正在爬取第{}页--------'.format(page))
还有为了方式ip被封,所以我们要给爬虫设置一个休眠时间,休眠时间取得是随机数。
time.sleep(random.random()*5)
运行结果如下(此处选取部分截图)


完整代码已经整理好,有需要的小伙伴公众号内回复'旅游代码'即可获取!

回复下方 「关键词」,获取优质资源


回复关键词 「linux」,即可获取 185 页 Linux 工具快速教程手册和154页的Linux笔记。


回复关键词 「Python进阶」,即可获取 106 页 Python 进阶文档 PDF


回复关键词 「Python面试题」,即可获取最新 100道 面试题 PDF


回复关键词 「python数据分析」,即可获取47页python数据分析与自然语言处理的 PDF


回复关键词 「python爬虫」,满满五份PPT爬虫教程和70多个案例


回复关键词 「Python最强基础学习文档」,即可获取 168 页 Python 最强基础学习文档 PDF,让你快速入门Python

推荐我的微信号

来围观我的朋友圈,我的经验分享,技术更新,不定期送书,坑位有限,速速扫码添加!
备注:开发方向_昵称_城市,另送你10本Python电子书。





点个在看你最好看





浏览 27
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报