热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

关于美团数据的爬取

打开美团官网,搜索足道这里是网站:美团网站,这里举例足疗美团数据加载方式Ajax请求美团的数据请求方式是Ajax的请求方式,属于数据异步加载方式,这是一个动态页面,而解决这种方式

打开美团官网,搜索足道

这里是网站:美团网站 ,这里举例足疗

进入到这个页面


美团数据加载方式Ajax请求

美团的数据请求方式是Ajax的请求方式,属于数据异步加载方式,这是一个动态页面,而解决这种方式有两种,一种selenium,一种使用requests进行抓包。在这里我们使用requests进行抓包


F12,打开开发者工具,进入Network

在这里插入图片描述

这里显示的所有就是这个页面的数据包,各种数据都在这里,图片,视频等等,我们找到我们要找的数据包

在这里插入图片描述

从而里面出现给的就是数据所在的位置,点击即可找到数据包

在这里插入图片描述

数据所在的位置,查看即可,然后找到数据包对应的url,和请求方式

在这里插入图片描述

这里我们可以看到url和请求方式,请求方式是get,所以在我们使用requests的时候我们就要使用get方式来请求这个url

发现这个?后面有很多参数,所以url我们选择到?之前,剩下的参数我们选择传入,在开发者工具中找到参数将所有参数复制粘贴到代码中

在这里插入图片描述

下面开始敲代码**

在这里插入图片描述

url = 'https://apimobile.meituan.com/group/v4/poi/pcsearch/1?'
data = {#将传入的参数复制到这里
#上一张图片的形式写入
}
#headers表示的是请求头,用来避免识别你是程序
#Referer是表示从那个页面跳转过来的
headers = {
'Referer': 'https://bj.meituan.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
}
#发起请求对数据网址
resp = requests.get(url, params=data, headers=headers)

我们参数和请求头的准备好,已经对网址进行了get请求

现在开始分析数据报格式,拿到数据的格式

在这里插入图片描述

可以看到数据是json格式,是在data里面的searchResult中,所以我们先把数据定位到searchResult中

因为数据是json格式,索引我们应该先把拿到的响应数据转换成json格式,然后再定位到searchResult中

searchresult = resp.json()['data']['searchResult']

这样就可以得到searchResult中的数据了

例如这个样式

在这里插入图片描述

然后我们就可以根据字典的获取元素的方式来拿到响应得到数据元素

searchresult = resp.json()['data']['searchResult']
for item in searchresult:
# pprint.pprint(item)
shop_id = item['id']
shop_url = f'https://www.meituan.com/xiuxianyule/{shop_id}'
dict = {
'商店id': item['id'],
'标题': item['title'],
'类型': item['backCateName'],
'评分': item['avgscore'],
'地区': item['areaname'],
'商店链接': shop_url
}

这就可以拿到美团搜索到的数据的封面的响应数据,详情页面的数据需要进一步访问,详情页的数据是静态数据,可以直接获取


这样基本上表面封面的数据就得心应手了接下来就可以进行数据存储了

在这里我最后存储的格式是csv格式的数据,所以要引入csv包

import csv
f=open('meituan.csv','a',encoding='utf-8',newline='')
csv_writer=csv.DictWriter(f,fieldnames=['商店id','标题','类型','评分','地区','商店链接'])
csv_writer.writeheader()#写入标头
csv_writer.writerow(dict)#写入爬取的数据

这样我们的爬取过程就完成了,针对于爬取多页,可以自行查看参数的变化规律,进行修改即可

爬取文件大概就是这个样子

在这里插入图片描述

最后展示完整代码

import requests
import csv
f=open('meituan.csv','a',encoding='utf-8',newline='')
csv_writer=csv.DictWriter(f,fieldnames=['商店id','标题','类型','评分','地区','商店链接'])
csv_writer.writeheader()#写入标头
url = 'https://apimobile.meituan.com/group/v4/poi/pcsearch/1?'
#美团的每一页网址不会变更,但变更的是offect,步值是32,没加一页,offect的值就加32
data = {
#传入的参数全部写到这里,使用键值对的形式
}
headers = {
'Referer': 'https://bj.meituan.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
}
resp = requests.get(url, params=data, headers=headers)
# print(resp.text)
# pprint.pprint(resp.json())
searchresult = resp.json()['data']['searchResult']
for item in searchresult:
# pprint.pprint(item)
shop_id = item['id']
shop_url = f'https://www.meituan.com/xiuxianyule/{shop_id}'
dict = {
'商店id': item['id'],
'标题': item['title'],
'类型': item['backCateName'],
'评分': item['avgscore'],
'地区': item['areaname'],
'商店链接': shop_url
}
csv_writer.writerow(dict)#写入对应表头的数据
print(dict)

如果没有requests库需要pip install requests,安装这个库。



推荐阅读
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 查询单个functionquery(id){$.ajax({url:smallproductServlet,async:true,type:POST,data:{typ ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
author-avatar
漂漂雪飘飘业_348
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有