python马蜂窝网站的爬取和简单分析。

news/2024/5/19 18:49:08/文章来源:https://blog.csdn.net/qq_35994802/article/details/82827452

完整代码看这里

  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. 数据分析

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_851579.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个网站的诞生- MagicDict开发总结1 [首页]

能够自己拥有一个 个人网站,可能是很多人的梦想。在这个阶级固化的时代,我们需要一个梦想和目标。。。。 由于本职工作不算忙碌,自己对于动手制作网站有兴趣,所以,从去年9月底开始,萌生了制作一个个人网站的…

通过脚本方式导出SharePoint网站集用户及其角色列表

这是课堂上的一个例子,分享出来给大家参考用。如果你管理一个或者多个网站集,那么这个脚本将有助于你快速地了解用户信息。 管理员们,懂点脚本还是很有用的哦,呵呵 将下面的脚本保存为一个ps1文件function Get-UsersWebPermission…

Java爬虫实践--爬取CSDN网站图片为例

实现的效果,自动在工程下创建Pictures文件夹,根据网站URL爬取图片,层层获取。在Pictures下以网站的层级URL命名文件夹,用来装该层URL下的图片。同时将文件名,路径,URL插入数据库,便于索引。 第一…

在线小说网站的设计与实现(附源码)

最近在做一个课程设计,在线小说网站的设计,以下是课题要求,需要项目练手的童鞋可以试试身手。 由于最近新学了JavaEE,所以采用了jspservlet来写,前端部分用了少量的js和jQuery处理,数据库用了MySQL&#xf…

最新LAMP×××网站平台PHP5.5.1 + Apache2.4.6 + mysql5.6.12

记录一下,今天配置的这台网站服务器,大部分都是在官方找的最新版源码包。1.下载安装所需要的最新软件源码包,包括最新的apache、mysql、php以及相关库文件的源码包。httpd-2.4.6.tar.gz:http://mirrors.cnnic.cn/apache//httpd/ht…

淘宝网采用什么技术架构来实现网站高负载分析

2019独角兽企业重金招聘Python工程师标准>>> (中国电子商务研究中心讯)时间过得很快,来淘宝已经两个月了,在这两个月的时间里,自己也感受颇深。下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可伸缩&…

另类解决 无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装

安装了PHPStudy,在登录PHPMyAdmin时,出现“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装”的提示,而无法进入数据库的问题。 在试过了N多网上的解决办法之后,终于觉醒,网的…

ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

咨询、留言、投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言、投诉都是咨询)。咨询跟文章非常相似,而且内容更少、更简单。 目录…

onmouseout,mouseover经过子元素也触发的问题解决方案

在mouseout与mouseover的冒泡问题上,相信有很多朋友都遇到过。今天这里就总结一下 关于mouseover和mouseout冒泡问题的解决方案: 首先,看下event.relatedTarget的用法。 relatedTarget 事件属性返回与事件的目标节点相关的节点。 relate…

25个精美的创意机构和设计工作室网站案例

浏览器创意机构和设计工作室为他们自己设计的网站是一件非常有趣的事情。这些人设计的网站,代表着整个领域的最新趋势,值得网页设计人员去跟随。 有人可能会认为他们会用最疯狂,过于超前的设计。但你会惊讶地知道,这些创意机构和设…

个人网站盈利的几种方式

之前看到一篇讲述个人网站盈利的10种方法的文章,原文在这里:http://www.sitepoint.com/10-ways-earn-money-from-your-site/ ,但不太适合中国国情,不够接地气。本文就说几个接地气的个人网站盈利的几种方法。(主要针对IT个人网站)…

大型网站系统架构演化之路

大型网站系统架构演化之路 前言 一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程…

微网站|h5弹窗|手机网站 html5 弹窗、弹层、提示框、加载条

为了精确体验,您可通过Chrome设备模式浏览。或通过[url]手机扫二维码进入[/url] layer mobile是为移动设备(手机、平板等webkit内核浏览器/webview)量身定做的弹层支撑,采用Native JavaScript编写,完全独立于PC版的lay…

访问jira网站中已解决问题链接时跳转到另一IP的解决办法

迁移完Jira后,以普通用户进入jira,点击Jira中已解决问题的链接,发现跳转到的IP是迁移前的IP,以下为解决办法。 第一步:使用管理员用户进入Jira,点击“管理”-->"通用设置"; 第二步…

Wordpress 网站搭建及性能监控方法详解!

2019独角兽企业重金招聘Python工程师标准>>> ######前言 说到 Wordpress,大家往往想到的是博客,其实,如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统。并且,如果你有一定的技术基础稍加改动,就可…

IIS 7 发布网站

1.先按F6编译通过。 2.操作如下列图上所示: 3. IIS 的配置 部署完毕 如有问题请留言,大家一起解决。

支付宝手机网站支付接口API之C#版

一、准备工作 1、使用企业支付宝签约手机网站支付 2、下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId60&articleId103564&docType1 下载地址:http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo…

JQuery仿购物网站放大镜特效所遇问题及思考

JQuery仿购物网站放大镜特效所遇问题及思考 先贴下效果图,然后描述起来也就不会不知道我在说什么了。 我碰到的问题一: 一开始我自己总结了是因为两个小原因导致的①使用了mouseover,mouseout事件②因为层叠样式(z-index)的原因。一开始的HTM…

bind、click、mouseover、mouseout及简写实现显示与隐藏效果

1、$().bind("click", function() {...........});也可以写成 $().click(function() {..........}); 2、$().bind("mouseover", function() {...........}) .bind("mouseout", function() {...........}); 也可以写成 $().mouseover(function…

如何修改XAMPP默认网站目录

XAMPP默认网站目录保存在...\xampp\htdocs文件夹下,修改目录步骤: 1.XAMPP面板,点击Apache服务器Config按钮,选择Apache(httpd.conf); 2.在打开的记事本中,使用快捷键CtrlF进行查找&…