当前位置:   article > 正文

爬取去哪儿网旅游数据并且保存为csv文件_去哪儿网爬取

去哪儿网爬取

参考用Python分析元旦旅游热门城市,告诉你哪些景点性价比更高‘’一文,我们可以到去哪儿网站上爬取某个城市,比如厦门的旅游数据,并且在此基础上进行数据分析。下面简单总结一下爬取的过程。

一、获取json数据的url

在这里插入图片描述
我们开发者工具(快捷键ctrl+shift+I)可以进入上图界面,点击Network之后再搜索框当中输入json,我们就可以看到json数据的url,并且总结出url的格式如下:

url = f'http://piao.qunar.com/ticket/list.json?keyword={keyword}&region=&from=mpl_search_suggest&page={page}'
  • 1

这里面有一个siteList的列表,里面包含我们需要的旅游景点的信息:
在这里插入图片描述
这样,我们就可以根据这个url的结构编写python程序进行网络爬虫了。

二、python爬虫程序

我们需要使用fake_useragent中的用户代理来随机伪装,然后通过request方法对以上的url进行请求,返回得到模拟点击的json数据之后进行解析,我这里采用的手动解析的方法,可以研究一下是否有更方便的解析函数可以一步到位。
最后我们得到的是一个字典列表,即sightList,通过csv.DictWrite工具,我们可以把这个列表写入到csv文件中,注意这个工具有一个filedname的参数列表,表示我这个csv表格的表头有哪一些,这些表头参数,我通过一个全局变量key_set和diclst在过程中进行搜集了。

import requests
import random
from time import sleep
import csv
import pandas as pd
from fake_useragent import UserAgent
import pinyin
key_set = set()
diclst = []
def get_data(keyword,page):
	global key_set
	global diclst
	ua = UserAgent(verify_ssl=False)
	headers = {"User-Agent": ua.random}
	url = f'http://piao.qunar.com/ticket/list.json?keyword={keyword}&region=&from=mpl_search_suggest&page={page}'
	res = requests.request("GET", url,headers=headers)
	sleep(random.uniform(1, 2))
	try:
		res_json = res.json()
		sight_List = res_json['data']['sightList']
		for sight in sight_List:
			if 'childrenList' in sight.keys():
				print('There is a childrenList')
				childrenlist = sight['childrenList']
				for children in childrenlist:
					key_set.update(children.keys())
			key_set.update(sight.keys())
			diclst.append(sight)
			print(sight)
	except:
		pass
	return diclst

if __name__ == '__main__':
	keyword = "杭州"
	csvfilename = pinyin.get(keyword, format='strip', delimiter="_")
	sight_lists = []
	for page in range(1,40): #控制页数
		print(f"正在提取第{page}页")
		sleep(random.uniform(1, 2))
		sight_list = get_data(keyword,page)
		sight_lists.extend(sight_list)
	print(sight_lists)
	for sight in sight_lists:
		print(sight)
	with open(csvfilename+'.csv', 'w', encoding='utf8', newline='') as output_file:
	#print(res_json)
		try:
			toCSV = sight_lists
			fc = csv.DictWriter(output_file, fieldnames=key_set)
			fc.writeheader()
			fc.writerows(toCSV)
		except :
			pass
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

三、最终效果

我们可以设置keyword参数为对应的城市,比如“北京”、“杭州”、“上海”等,然后用page控制爬取的页数,以上程序会自动保存成对应的csv文件,把响应的信息保存下来,效果如下:
在这里插入图片描述
csv的截图如下
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/194855
推荐阅读
相关标签
  

闽ICP备14008679号