查看原文
其他

【Python实战】游客最青睐的城市,你的家乡上榜了吗?

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:郭泽源,中南财经政法大学金融学院‍

本文编辑:周一鸣

技术总编:王玉婷

Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
01 引言
五一假期刚过,想必大家都趁着假期出去游玩了一趟。那么大家都去哪里玩了呢?此番游玩的体验又如何呢?为了能使之后的旅行体验感更好,我们可以趁此机会研究一下哪里的游客最多并找到适合自己的出行攻略。为此,小编给大家推荐一个宝藏网站:去哪儿旅行的旅游攻略模块。在这里,有网友推荐的上千个旅游攻略,每个攻略都包括出行天数、人均费用、适合哪些人群、玩法等等。接下来,小编就带领大家获取此攻略库,提取我们想要的“知识点”,并对热门城市进行可视化分析。

02 攻略库获取
该网页的结构非常简单,利用requests库就可以轻松获取。唯一需要注意的是,在大量获取网页信息时可能需要使用代理,或者更换IP。另外,本文使用 css 选择器进行源代码的解析。代码如下:
import requestsimport parselimport csvif __name__ == "__main__": csv_qne = open('去哪儿旅行.csv', mode='a', encoding='utf-8-sig', newline='') csv_writer = csv.writer(csv_qne) csv_writer.writerow(['标题', '短评', '浏览量', '天数', '人物', '人均费用', '玩法']) for page in range(1,100): # 获取所有页面详情页URL url = f'https://travel.qunar.com/travelbook/list.htm?page={page}&order=hot_heat' response = requests.get(url) html_data = response.text selector = parsel.Selector(html_data) # 提取每一页的url 可以使用bs4、正则表达式、xpath等 在这里我们使用css选择器 url_list = selector.css('body > div.qn_mainbox > div > div.left_bar > ul > li > h2 > a::attr(href)').getall() for detail_list in url_list : detail_id = detail_list.replace('/youji/','') detail_url = 'https://travel.qunar.com/travelbook/note/' + detail_id # 获取每一详情页的所有信息 response_1 = requests.get(detail_url) data_html_1 = response_1.text # 提取所需要的数据 包括出发日期 天数 人均费用 人物 玩法 地点 浏览量等等 selector_1 = parsel.Selector(data_html_1) #城市 title = selector_1.css('.b_crumb_cont *:nth-child(3)::text').get() #短评 comment = selector_1.css('.title.white::text').get() #浏览量 count = selector_1.css('.view_count::text').get() # 天数 days = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howlong > p > span.data::text').get() # 人物 people = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.who > p > span.data::text').get() #人均费用 money = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howmuch > p > span.data::text').get() #玩法 play_list = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.how > p > span.data span::text').getall() play = '、'.join(play_list) print(title, comment, count, days, people, money, play) csv_writer.writerow([title, comment, count, days, people, money, play]) csv_qne.close() #删除缺失值 import pandas as pd data = pd.read_csv("去哪儿旅行.csv") res = data.dropna(how="all")    res.to_csv("去哪儿1.csv", index=False)
分批次获取后,合并数据:
import pandas as pdimport numpy as np#读取文件df1 = pd.read_csv("去哪儿1.csv")df2 = pd.read_csv("去哪儿2.csv")df3 = pd.read_csv("去哪儿3.csv")df4 = pd.read_csv("去哪儿4.csv")df5 = pd.read_csv("去哪儿5.csv")#合并df = pd.concat([df1,df2,df3,df4,df5])df.drop_duplicates() #数据去重#保存合并后的文件df.to_csv('去哪1-5.csv',encoding = 'utf-8-sig')
获取到的完整数据如下图所示:

03 热门城市
获取到攻略数据后,我们还想看一看游客们最喜欢去的城市是哪些?为此,我们可以先利用正则从攻略文章的标题中提取出所有的城市名称,再进行词频统计,获取词频表中前30名的城市,最后将其渲染在词云图上。
(1)
词频统计
import pandas as pdimport retitle = pd.read_csv('去哪1-5csv')#城市名字提取title_info = title['标题']title_list = title_info.values.tolist()new_title_list = []for data in title_list: if re.match(r'.*旅游攻略',data) != None: new_title_list.append(data)title_str = " ".join(new_title_list)print(title_str)city_list = re.findall(r'(.*?)旅游攻略',title_str)print(city_list)# 进行词频统计import jiebacity_dic = {}for city in city_list: city_dic[city] = city_dic.get(city,0) + 1print(city_dic)#对前三十名城市进行排序sort_data = sorted(city_dic.items(),key=lambda a:a[1],reverse=True)[:30]print(sort_data)data1 = dict(sort_data)print(data1)for a,b in data1.items(): print(str(a) + ":"+str(b))
词频统计的部分结果如下图所示:

(2)
绘制词云图
import wordcloudimages = Image.open("picture.jpg")maskImages = np.array(images)wc = wordcloud.WordCloud(width=1500, height=1500, background_color='white',font_path='C:\\Windows\\Fonts\\STFANGSO.ttf',mask=maskImages,scale=25)wc.generate_from_frequencies(data1) wc.to_file("city.jpg")
渲染后的词云图如下:

我们可以看到,三亚、厦门、丽江、苏州等地是大家最喜欢的出游城市。大家都可以根据自己的需求,从攻略文档中获取想要的信息,从而制定出适合自己与亲朋好友的出行计划。
END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐

What’ new ? 速通Stata 18

【爬虫实战】Python爬取美食菜谱揭秘网络中心人物,你会是其中之一吗?考研之后,文科生需以“do”躬“do”!焕新升级!轻松获取港股、权证的历史交易数据爬虫俱乐部的精彩答疑---cntraveltime【爬虫俱乐部新命令速递】在Stata中与ChatGPT对话

用`fs`命令批量获取文件夹和不同文件夹下的excel文件

自然语言处理之实例应用

JSON帮手,FeHelper

最新、最热门的命令这里都有!

Python实现微信自动回复告诉python,我想“狂飙”了——线程池与异步协程为爬虫提速高级函数——map()和reduce()

Stata绘制条形图的进阶用法

快来看看武汉的房价是不是又双叒叕涨了!Python 常见内置函数(二)

Stata绘制饼形图的进阶用法

Python标准库--logging模块
     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

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

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