查看原文
其他

用python爬取去哪儿网游记,给自己做一份疫情结束后的旅行指南

奶糖猫 凹凸数据 2021-08-09
每晚九点,我们准时相约  


大家好,我是朱小五


2019年的春节假期会给我们留下深刻的印象,没有拜年、没有家庭聚餐、没有三五好友间的寒暄嬉闹;2020年的春天也会给我们这代人留下深刻的印象,非典时期的我们还是两三岁傻乎乎的孩子,却在这个春天迎头撞上了新冠,选择宅在家大概是我们普通人仅有的贡献,虽经历了确诊人数的峰值时期,但也见证了这个曲线逐渐缓和,渐渐“春暖了雪也融了”。


所以待疫情之后,我想用一场旅行“弥补”自己,这会是许多人内心所想,只是在等那一天罢了。


在“去哪儿网”爬取了一份有关“游记”的数据集,做一份简易的旅行攻略。


数据获取


数据地址:去哪儿网—>攻略—>攻略库—>热门游记



如图上可爬取到一些有用的数据:出发时间、旅游天数、人均费用、结伴人物、玩法、一条简介、游记的浏览量,当然也包括旅游地点(在简介之上,未截图),去哪儿网是一个对爬虫比较友好的网站,不需要模拟登录,只需要加上请求头即可完成爬取,切记爬慢一点,拿着人家的数据还给人家添麻烦,属实过分。


部分爬虫代码,完整版文末获取:


def spider():
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.360',
'cookies': '*********************************',
'Host': 'travel.qunar.com'
}
count = 1
for i in range(len(the_url_list)):
try:
print('正在爬取第%s页'% count)
response = requests.get(url=the_url_list[i],headers = headers)
response.encoding = 'utf-8'
html = response.text
soup = BeautifulSoup(html,'lxml')
information = soup.find('p',attrs={'class': 'b_crumb_cont'}).text.strip().replace(' ','')
info = information.split('>')

last_list.append([location,introduction,Time,Day,Money,People,Play,Look])
#设置爬虫时间
time.sleep(random.randint(3,5))
count+=1
except Exception as e :
print(e)
#写入csv
with open('Travel.csv', 'a', encoding='utf-8-sig', newline='') as csvFile:
csv.writer(csvFile).writerow(['地点', '短评', '出发时间', '天数','人均费用','人物','玩法','浏览量'])
for rows in last_list:
csv.writer(csvFile).writerow(rows)


最终爬取得到的数据概览:


这份数据集共包括1775个样本以及8个属性。


数据整理


通过观察数据,有以下问题需要处理:


  1. 由于有的网页不规范,所以有的网页没有爬取到“地点”这一信息,数据中用“攻略”代替了;

  2. 将“出发时间”更改为标准时间格式;

  3. “天数”中有“99+”的字样,明显是错误数据;

  4. “人均费用”有低于100的数据???我读的书少,不要骗我;

  5. “浏览量”中的数据不规范,需要统一强制转换成整型;


部分代码如下,完整版文末获取:


经数据清洗后:



数据可视化


短评词云分析


from pyecharts import WordCloud

wordcloud=WordCloud('简介词云分析',width=600,height=400)
wordcloud.add('简介词云分析',word1,num1,word_size_range=[25,80],shape = 'diamond')
wordcloud.render("5.html")



美食”、“成都”、“自驾”是权重最高的三个词,事实确实如此,当我们计划到一个陌生城市游玩时,可能脑海里第一个想到的并不是当地有什么风景可看,而是有什么美食可吃,大概每个人都能算得上一个吃货吧;

自驾游也是当下火热的出游方式,随时都可以来一场说走就走的旅行。



旅游胜地Top10及对应费用


data1 = data
data1['地点'].value_counts().head(10)



就这份数据集而言,成都以106次访问成为Top1,成都的都江堰就足以引客无数,但可可爱爱熊猫的繁殖基地也位于成都,更是吸引了许多的熊猫粉前往,谁不想近距离接触一下这个铁憨憨国宝呢。



就价格而言,三亚成为Top1,平均人均费用近2000RMB,而平遥平均人均费用仅有1267RMB,一个是绝美的海岛风情,另一个则是饱经沧桑的平遥古城。



出游天数分析


data1['天数'].value_counts()



旅行时长主要分布在2-5天之间,3天最为普遍,太短会未尽兴致,太长又会花销太大,若有一份好的旅行计划,3天应该足够让你赏过一座城市的名胜,吃过大部分的特色美食,领略到这个城市的风情,也足够让你喜欢上这座城市。



出游方式分析


data1['人物'].value_counts()



三五好友”结伴出游方式占比达到了40%,我认为这是最舒服的出游方式,没有之一,不需要有任何担忧,忘记生活中任何的烦恼,与朋友一起释放自己的天性,只顾开心就好啦。



出游玩法分析



摄影”和“美食”可谓与旅行息息相关,一次完整的旅行最不能缺的就是“摄影”,拍美食发到朋友圈、拍风景发到朋友圈、拍完美的自己发到朋友圈;工作之后就没有了寒暑假,所以利用周末来一次短途旅行就成为了大多数人的首选。



出游时间分析



2019年的旅游时间曲线大约在五月一号起伏最大,原因肯定是因为假期调休延长至4天,为了调整自己生活及工作的状态,很多人利用这个假期去旅行放松自己。



如果疫情能在4月底控制,而五月一还有假期的话,是旅游业会暴走呢?还是仍然会限制人群大量聚集呢?



旅游地点推荐


k_list = []
the_list = []
keyword = input('请输入旅行月份:')
data5 = data4[data4['旅行月份'] == str(keyword)]
keyword1 = input('请输入结伴出游方式:')
data6 = data5[data5['人物'] == str(keyword1)]
price = int(input('请输入预期价格上限:'))
data7 = data6[data6['人均费用']<=price]
day1 = int(input('请输入旅行时长下限:'))
day2 = int(input('请输入旅行时长上限:'))
data8 = data7[(data7['天数']>=day1)&(data7['天数']<=day2)]
data8



八月暑假,与三五好友,来一场说走就走的旅行;于我而言,最想游荡西安,吃不停,玩不停,感受这座古城的风情,莫不是假期最好的选择。


小结


综上述分析可得到一些结论:


  1. 个人认为性价比较高的旅游城市:

    杭州、成都。

  2. 旅游天数大多控制在2-5天内,不宜过多。

  3. 三五好友一起旅游是最令人们喜欢的出游方式。

  4. “摄影”与“美食”已成为旅游的代名词。

  5. 避开旅游高峰期,三月和六月的周末短途旅行也是不错的选择。





文中相关源码

关注公众号「凹凸数据」后台回复“旅行”即可获取







近期文章,点击图片即可查看






后台回复关键词「进群」,即刻加入读者交流群~


除了公司,一个多月没去过其他地方了。。。

朱小五

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

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