完整代码看这里

  1. 获得热门省编号和直辖市编号
    蚂蜂窝中的所有城市、景点以及其他都有一个专属的5位数字编号(id号),我们第一步要做的就是获取mddid,http://www.MaFengWo.cn/mdd/,
    进行后续的进一步分析

我们先提取出每个目的地的专属id(即href中的数字部分,eg:10065)

def find_province_url(url):html = get_html_text(url)soup = BeautifulSoup(html, 'lxml')municipality_directly_info(soup)  # 处理直辖市信息dts = soup.find('div', class_='hot-list clearfix').find_all('dt')name = []provice_id = []urls = []print('正在处理非直辖市信息')for dt in dts:all_a = dt.find_all('a')for a in all_a:name.append(a.text)link = a.attrs['href']provice_id.append(re.search(r'/(\d.*).html', link).group(1))  # 得到这个省的编码# 得到这个省的热门城市链接data_cy_p = link.replace('travel-scenic-spot/mafengwo', 'mdd/citylist')urls.append(parse.urljoin(url, data_cy_p))return name, provice_id, urls

我们会发现除了直辖市之外的目的地会有热门城市,分析网页会发现这是一个Ajax请求。这是一个post请求。需要携带我们第一步获得的mddid,页数。


def parse_city_info(response):text = response.json()['list']soup = BeautifulSoup(text, 'lxml')items = soup.find_all('li', class_="item")info = []nums = 0for item in items:city = {}city['city_id'] = item.find('a').attrs['data-id']city['city_name'] = item.find('div', class_='title').text.split()[0]city['nums'] = int(item.find('b').text)nums += city['nums']info.append(city)return info, numsdef func(page, provice_id):print(f'解析{page}页信息')data = {'mddid': provice_id, 'page': page}response = requests.post('http://www.mafengwo.cn/mdd/base/list/pagedata_citylist', data=data)info, nums = parse_city_info(response)  # 得到每个景点城市的具体名字, 链接, 多人少去过return (info, nums)def parse_city_url(url, provice_id):""":param url: 省url:param provice_id: 省id:return:"""html = get_html_text(url)provice_info = {}   # 存储这个省的信息soup = BeautifulSoup(html, 'lxml')pages = int(soup.find(class_="pg-last _j_pageitem").attrs['data-page'])  # 这个省总共有多少页热门城市city_info = []sum_nums = 0  # 用来记录这个省的总流量tpool = ThreadPoolExecutor(1)obj = []for page in range(1, pages + 1):  # 解析页面发现是个post请求t = tpool.submit(func, page, provice_id)obj.append(t)for i in as_completed(obj):info, nums = i.result()sum_nums += numscity_info.extend(info)provice_info['sum_num'] = sum_numsprovice_info['citys'] = city_inforeturn provice_info

2.到这一步我们所有热门城市的id都已经获得。接下来就是根据id号获得每个热门城市的景点。美食。

    def get_city_food(self, id_):url = 'http://www.mafengwo.cn/cy/' + id_ + '/gonglve.html'print(f'正在解析{url}')soup = self.get_html_soup(url)list_rank = soup.find('ol', class_='list-rank')food = [k.text for k in list_rank.find_all('h3')]food_count = [int(k.text) for k in list_rank.find_all('span', class_='trend')]food_info = []for i, j in zip(food, food_count):fd = {}fd['food_name'] = ifd['food_count'] = jfood_info.append(fd)return food_infodef get_city_jd(self, id_):""":param id_:城市编码id:return: 景点名称和评论数量"""url = 'http://www.mafengwo.cn/jd/' + id_ + '/gonglve.html'print(f'正在解析{url}')soup = self.get_html_soup(url)jd_info = []try:all_h3 = soup.find('div', class_='row-top5').find_all('h3')except:print('没有景点')jd = {}jd['jd_name'] = ''jd['jd_count'] = 0jd_info.append(jd)return jd_infofor h3 in all_h3:jd = {}jd['jd_name'] = h3.find('a')['title']try:jd['jd_count'] = int(h3.find('em').text)except:print('没有评论')jd['jd_count'] = 0jd_info.append(jd)return jd_info
  1. 数据分析

python马蜂窝网站的爬取和简单分析。相关推荐

  1. python爬猫眼电影影评,Python系列爬虫之爬取并简单分析猫眼电影影评

    前言 今天给大家介绍利用Python爬取并简单分析猫眼电影影评.让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: pyecharts模块: jieba模 ...

  2. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略

    欧阳元东 摘要:Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python ...

  3. python爬取豆瓣短评_爬取并简单分析豆瓣电影短评

    导语 利用Python爬取并简单分析豆瓣电影短评. 说起来挺逗的,去年爬豆瓣短评的时候还是可以爬个几万条数据的,昨天我还想着终于可以起个唬人的标题了,什么爬取了xxx电影的xxx万条数据. 于是昨晚写 ...

  4. 基于python的汽车信息爬取与可视化分析系统

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从某汽车门户网站采集汽车数据,并利用 Flask + Echarts 前后端框 ...

  5. 京东爬取评论简单分析

    京东爬取评论简单分析 1.定义一个获取所有评论的函数 def get_comment(url): """ 获取评论函数 """ i = 0 ...

  6. python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它

    不论是自然语言处理还是计算机视觉,做机器学习算法总会存在数据不足的情况,而这个时候就需要我们用爬虫获取一些额外数据.这个项目介绍了如何用 Python 登录各大网站,并用简单的爬虫获取一些有用数据,目 ...

  7. Python爬取并简单分析2024年普通高校招生专业(专业类)选考科目要求

    推荐教材: <Python网络程序设计(微课版)>,ISBN:978-7-302-58312-7,董付国,清华大学出版社,2021年8月出版,京东.当当.淘宝均有销售 配套资源: 教学大纲 ...

  8. python爬取bilibili数据_BiliBili爬取数据简单分析

    爬虫介绍:从1号直播间爬取发弹幕人账号,当时在线人数有五万左右,但到8000多时每3s发弹幕的新用户已经很少了,所以我就以这8000多人为起始点,将其放入队列中,取出一个,获得其关注人数,粉丝数,并将 ...

  9. python登录网站后爬取数据_如何用 Python 登录主流网站,爬取一些需要的数据

    最近收集了一些网站的登陆方式和爬虫程序,有的通过 selenium 登录,有的则通过抓包直接模拟登录.作者希望该项目能帮助初学者学习各大网站的模拟登陆方式,并爬取一些需要的数据. 作者表示模拟登陆基本 ...

最新文章

  1. tempfile PermissionError: [Errno 13] Permission denied
  2. u盘最大单个文件支持多少g_为什么32G的U盘却存了不4G的文件,原因很简单
  3. 什么意思_手机HD是什么意思 手机信号区显示hd是什么意思
  4. vue 计算属性和data_Vue计算属性原理和使用场景
  5. linux zip包解压乱码
  6. java向上和向下的区别_Java的向上和向下转型
  7. windows 7系统报错txupd.exe
  8. 《那些年啊,那些事——一个程序员的奋斗史》——81
  9. 选择对话框 android_Android日期时间选择器对话框
  10. Vue中如何正常使用锚点定位?
  11. 同步异步阻塞非阻塞杂记 1
  12. 矩阵分析与应用(20)
  13. 电脑知识 - bin文件夹是什么
  14. fastlane php,fastlane自动化打包ipa并发布到firim或者蒲公英
  15. 举例来学cond原语
  16. 用上柔宇「办公神器套装」,我一天就写了三天的稿子
  17. 教你如何使用 python 制作一个简单的密码本
  18. 国家、广东省、深圳市的“智能机器人”扶持政策汇总
  19. 信息学奥赛一本通高手训练1679:子集
  20. C#_08_官方文档_语言介绍

热门文章

  1. 请编写函数判断一个数是不是素数
  2. Xshell配色方案
  3. EMC联邦帝国前世今生
  4. 项目日志出现:syntax error, error in :‘it 5 LIMIT ? ‘, expect LIMIT, actual LIMIT pos 问题
  5. 黑磷量子点/铂杂化介孔二氧化硅纳米颗粒/负载黑磷量子点红细胞膜纳米囊泡BPQD-EMNVs的应用
  6. Going to Redmond (keep moving)
  7. 郑州轻工业大学oj1023C语言答案,郑州轻工业学院(ZZULI) OJ系统第1431题 读数字 解题报告...
  8. python quit函数_在Python中启用quit函数的问题
  9. “百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100 文钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?
  10. 非等级式随机森林----随机蕨分类器