千家信息网

如何用Python爬取马蜂窝的出行数据

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这期内容当中小编将会给大家带来有关如何用Python爬取马蜂窝的出行数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。正值火辣的暑假,朋友圈已经被大家的旅行足迹刷屏
千家信息网最后更新 2026年11月01日如何用Python爬取马蜂窝的出行数据

这期内容当中小编将会给大家带来有关如何用Python爬取马蜂窝的出行数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

正值火辣的暑假,朋友圈已经被大家的旅行足迹刷屏了,真的十分惊叹于那些把全国所有省基本走遍的朋友们。与此同时,也就萌生了写篇旅行相关的内容,本次数据来源于一个对于爬虫十分友好的旅行攻略类网站:蚂蜂窝。

一、获得城市编号

蚂蜂窝中的所有城市、景点以及其他的一些信息都有一个专属的5位数字编号,我们***步要做的就是获取城市(直辖市+地级市)的编号,进行后续的进一步分析。

以上两个页面就是我们的城市编码来源。需要首先从目的地页面获得各省编码,之后进入各省城市列表获得编码。

过程中需要Selenium进行动态数据爬取,部分代码如下:

  1. def find_cat_url(url):

  2. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}

  3. req=request.Request(url,headers=headers)

  4. html=urlopen(req)

  5. bsObj=BeautifulSoup(html.read(),"html.parser")

  6. bs = bsObj.find('div',attrs={'class':'hot-list clearfix'}).find_all('dt')

  7. cat_url = []

  8. cat_name = []

  9. for i in range(0,len(bs)):

  10. for j in range(0,len(bs[i].find_all('a'))):

  11. cat_url.append(bs[i].find_all('a')[j].attrs['href'])

  12. cat_name.append(bs[i].find_all('a')[j].text)

  13. cat_url = ['http://www.mafengwo.cn'+cat_url[i] for i in range(0,len(cat_url))]

  14. return cat_url

  15. def find_city_url(url_list):

  16. city_name_list = []

  17. city_url_list = []

  18. for i in range(0,len(url_list)):

  19. driver = webdriver.Chrome()

  20. driver.maximize_window()

  21. url = url_list[i].replace('travel-scenic-spot/mafengwo','mdd/citylist')

  22. driver.get(url)

  23. while True:

  24. try:

  25. time.sleep(2)

  26. bs = BeautifulSoup(driver.page_source,'html.parser')

  27. url_set = bs.find_all('a',attrs={'data-type':'目的地'})

  28. city_name_list = city_name_list +[url_set[i].text.replace('\n','').split()[0] for i in range(0,len(url_set))]

  29. city_url_list = city_url_list+[url_set[i].attrs['data-id'] for i in range(0,len(url_set))]

  30. js="var q=document.documentElement.scrollTop=800"

  31. driver.execute_script(js)

  32. time.sleep(2)

  33. driver.find_element_by_class_name('pg-next').click()

  34. except:

  35. break

  36. driver.close()

  37. return city_name_list,city_url_list

  38. url = 'http://www.mafengwo.cn/mdd/'

  39. url_list = find_cat_url(url)

  40. city_name_list,city_url_list=find_city_url(url_list)

  41. city = pd.DataFrame({'city':city_name_list,'id':city_url_list})

二、获得城市信息

城市数据分别从以下几个页面获取:

(a)小吃页面

(b)景点页面

(c)标签页面

我们将每个城市获取数据的过程封装成函数,每次传入之前获得的城市编码,部分代码如下:

  1. def get_city_info(city_name,city_code):

  2. this_city_base = get_city_base(city_name,city_code)

  3. this_city_jd = get_city_jd(city_name,city_code)

  4. this_city_jd['city_name'] = city_name

  5. this_city_jd['total_city_yj'] = this_city_base['total_city_yj']

  6. try:

  7. this_city_food = get_city_food(city_name,city_code)

  8. this_city_food['city_name'] = city_name

  9. this_city_food['total_city_yj'] = this_city_base['total_city_yj']

  10. except:

  11. this_city_food=pd.DataFrame()

  12. return this_city_base,this_city_food,this_city_jd

  13. def get_city_base(city_name,city_code):

  14. url = 'http://www.mafengwo.cn/xc/'+str(city_code)+'/'

  15. bsObj = get_static_url_content(url)

  16. node = bsObj.find('div',{'class':'m-tags'}).find('div',{'class':'bd'}).find_all('a')

  17. tag = [node[i].text.split()[0] for i in range(0,len(node))]

  18. tag_node = bsObj.find('div',{'class':'m-tags'}).find('div',{'class':'bd'}).find_all('em')

  19. tag_count = [int(k.text) for k in tag_node]

  20. par = [k.attrs['href'][1:3] for k in node]

  21. tag_all_count = sum([int(tag_count[i]) for i in range(0,len(tag_count))])

  22. tag_jd_count = sum([int(tag_count[i]) for i in range(0,len(tag_count)) if par[i]=='jd'])

  23. tag_cy_count = sum([int(tag_count[i]) for i in range(0,len(tag_count)) if par[i]=='cy'])

  24. tag_gw_yl_count = sum([int(tag_count[i]) for i in range(0,len(tag_count)) if par[i] in ['gw','yl']])

  25. url = 'http://www.mafengwo.cn/yj/'+str(city_code)+'/2-0-1.html '

  26. bsObj = get_static_url_content(url)

  27. total_city_yj = int(bsObj.find('span',{'class':'count'}).find_all('span')[1].text)

  28. return {'city_name':city_name,'tag_all_count':tag_all_count,'tag_jd_count':tag_jd_count,

  29. 'tag_cy_count':tag_cy_count,'tag_gw_yl_count':tag_gw_yl_count,

  30. 'total_city_yj':total_city_yj}

  31. def get_city_food(city_name,city_code):

  32. url = 'http://www.mafengwo.cn/cy/'+str(city_code)+'/gonglve.html'

  33. bsObj = get_static_url_content(url)

  34. food=[k.text for k in bsObj.find('ol',{'class':'list-rank'}).find_all('h4')]

  35. food_count=[int(k.text) for k in bsObj.find('ol',{'class':'list-rank'}).find_all('span',{'class':'trend'})]

  36. return pd.DataFrame({'food':food[0:len(food_count)],'food_count':food_count})

  37. def get_city_jd(city_name,city_code):

  38. url = 'http://www.mafengwo.cn/jd/'+str(city_code)+'/gonglve.html'

  39. bsObj = get_static_url_content(url)

  40. node=bsObj.find('div',{'class':'row-top5'}).find_all('h4')

  41. jd = [k.text.split('\n')[2] for k in node]

  42. node=bsObj.find_all('span',{'class':'rev-total'})

  43. jd_count=[int(k.text.replace(' 条点评','')) for k in node]

  44. return pd.DataFrame({'jd':jd[0:len(jd_count)],'jd_count':jd_count})

三、数据分析

PART1:城市数据

首先我们看一下游记数量最多的***0城市:

游记数量***0数量基本上与我们日常所了解的热门城市相符,我们进一步根据各个城市游记数量获得全国旅行目的地热力图:

看到这里,是不是有种似曾相识的感觉,如果你在朋友圈晒的足迹图与这幅图很相符,那么说明蚂蜂窝的数据与你不谋而合。

***我们看一下大家对于各个城市的印象是如何的,方法就是提取标签中的属性,我们将属性分为了休闲、饮食、景点三组,分别看一下每一组属性下大家印象最深的城市:

看来对于蚂蜂窝的用户来说,厦门给大家留下的印象是非常深的,不仅游记数量充足,并且能从中提取的有效标签也非常多。重庆、西安、成都也无悬念地给吃货们留下了非常深的印象,部分代码如下:

bar1 = Bar("餐饮类标签排名")  bar1.add("餐饮类标签分数", city_aggregate.sort_values('cy_point',0,False)['city_name'][0:15],          city_aggregate.sort_values('cy_point',0,False)['cy_point'][0:15],          is_splitline_show =False,xaxis_rotate=30)  bar2 = Bar("景点类标签排名",title_top="30%")  bar2.add("景点类标签分数", city_aggregate.sort_values('jd_point',0,False)['city_name'][0:15],          city_aggregate.sort_values('jd_point',0,False)['jd_point'][0:15],          legend_top="30%",is_splitline_show =False,xaxis_rotate=30)  bar3 = Bar("休闲类标签排名",title_top="67.5%")  bar3.add("休闲类标签分数", city_aggregate.sort_values('xx_point',0,False)['city_name'][0:15],          city_aggregate.sort_values('xx_point',0,False)['xx_point'][0:15],          legend_top="67.5%",is_splitline_show =False,xaxis_rotate=30)  grid = Grid(height=800)  grid.add(bar1, grid_bottom="75%")  grid.add(bar2, grid_bottom="37.5%",grid_top="37.5%")  grid.add(bar3, grid_top="75%")  grid.render('城市分类标签.html')

PART2:景点数据

我们提取了各个景点评论数,并与城市游记数量进行对比,分别得到景点评论的绝对值和相对值,并据此计算景点的人气、代表性两个分数,最终排名***5的景点如下:

蚂蜂窝网友对于厦门真的是情有独钟,鼓浪屿也成为了***人气的景点,在城市代表性方面西塘古镇和羊卓雍措位列前茅。暑假之际,如果担心上排的景点人太多,不妨从下排的景点中挖掘那些人少景美的旅游地。

PART3:小吃数据

***我们看一下大家最关注的的与吃相关的数据,处理方法与PART2景点数据相似,我们分别看一下***人气和***城市代表性的小吃。

出乎意料,蚂蜂窝网友对厦门果真爱得深沉,让沙茶面得以超过火锅、烤鸭、肉夹馍跻身***人气的小吃。

在城市代表性方面,海鲜的出场频率非常高,这点与大(ben)家(ren)的认知也不谋而合,PART2与3的部分代码如下:

bar1 = Bar("景点人气排名")  bar1.add("景点人气分数", city_jd_com.sort_values('rq_point',0,False)['jd'][0:15],          city_jd_com.sort_values('rq_point',0,False)['rq_point'][0:15],          is_splitline_show =False,xaxis_rotate=30)  bar2 = Bar("景点代表性排名",title_top="55%")  bar2.add("景点代表性分数", city_jd_com.sort_values('db_point',0,False)['jd'][0:15],          city_jd_com.sort_values('db_point',0,False)['db_point'][0:15],          is_splitline_show =False,xaxis_rotate=30,legend_top="55%")  grid=Grid(height=800)  grid.add(bar1, grid_bottom="60%")  grid.add(bar2, grid_top="60%",grid_bottom="10%")  grid.render('景点排名.html')

上述就是小编为大家分享的如何用Python爬取马蜂窝的出行数据了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

城市 景点 数据 标签 人气 代表 代表性 分数 数量 蚂蜂 页面 游记 代码 印象 小吃 就是 编码 部分 分析 旅行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 百单网互联网科技有限公司怎么样 亿人帮互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 为想互联网科技怎么样 互联网科技官网 互联网巨头科技公司 重庆互联网络科技 金融科技创新监管互联网金融 易互联网科技有限公司 期待互联网科技 科技创新互联网企业 融势互联网科技 互联网科技公司需要的职位 宁波青枫互联网科技有限公司 中科明德北京互联网科技 2021互联网科技公司排名 杭州披云加互联网科技有限公司 安徽九吞吴互联网科技有限公司 高科技和互联网的现代国家 新华互联网科技 科技互联网政务服务 金融科技还是互联网 上海挚品互联网科技 苏州互联网科技贷款公司 互联网公司会议桌创意科技软装饰 汉立互联网科技有限公司联系电话 赶超互联网科技 微信多开 互联网领先科技宣传片 上海旺乐尼互联网科技有限公司
0