美团外卖页面分析

本文仅供学习,请勿用于任何非法用途!

美团外卖目前有h5和app两个端,再对比两端的加密方式后,h5相对会简单些,毕竟接口和css加解密的方式都能通过chrome调试获得,需要花时间攻克的主要是对ip和账号的限制。

美团外卖h5地址 美团外卖

一、ip的问题

花了不少时间去找好用的代理ip,由于需要在登录状态获取数据,因此ip必须是长效的,否则频繁更换ip,可能账号很快就会被封掉,还尝试过手机热点/云主机,但是很快都被美团识别到,到目前为止还没有找到稳定好用的代理ip,如果你有好用的,不妨交流下。目前想到的方案:

1、找朋友或兼职,在不同的ip运行程序

2、在朋友或兼职的电脑上搭建代理,自己实现代理ip功能。

二、账号问题

为了这次任务搞了几个手机号注册了美团,最好用这些账号下个1单外卖,因为有时验证会让你填入最近一次的订单号,有时是让你填身份证里生日的8位数字。然后尽量账号与ip配对使用,避免混用,否则也容易被封。其次就是短信验证的问题,账号少的情况下,手动输输算了,如果的多的话,可以考虑买个猫池或者自己用adb去实现短信的自动输入。

三、定位问题

美团外卖只能搜索附近店铺,因此比如你想获得全上海的的全家超市,你是不可能通过一次搜索全部获得,必须不断的变换位置进行搜索,而美团在你访问h5页面的过程中会不断获得你的位置信息,同时会用ip定位获得你的位置,因此在你设置了设备的位置后,还需要拦截美团的主动定位请求,否则你每次搜索只能搜到你ip附

### 使用 Scrapy 和 Selenium 对美团外卖 H5 页面进行网页抓取 对于美团外卖这样的现代 Web 应用程序,其前端通常由 JavaScript 动态加载内容。为了有效地抓取这些页面的数据,可以采用两种主要策略之一: 1. **分析 AJAX 请求并直接调用 API 接口** 2. **利用 Selenium 或 Splash 模拟浏览器行为** #### 方法一:分析 AJAX 请求 如果目标网站通过 AJAX 加载数据,则可以直接定位到实际的 JSON 数据源 URL 并发起 HTTP GET/POST 请求来获取所需信息。这种方法效率高且资源消耗少。 ```python import json import requests def fetch_meituan_data(): api_url = "https://h5api.meituan.com/waimai/v2/poi/" # 假设这是真实的API端点 params = { 'uuid': 'your_unique_identifier', 'platform': '4', # 移动平台标识符 'partner': '123', # 合作伙伴ID 'originUrl': 'http://meishi.meituan.com/i/?ci=cty_id&stid=biz_type' } response = requests.get(api_url, params=params) data = response.json() with open('meituan_restaurants.json', 'w') as f: json.dump(data, f) fetch_meituan_data()[^4] ``` 此代码片段展示了如何向假设存在的 Meituan 外卖 API 发送请求,并保存返回的结果为本地文件 `meituan_restaurants.json`。 #### 方法二:使用 Selenium 进行动态渲染页面抓取 当无法轻易找到或解析出 AJAX 调用时,可以选择借助 Selenium 来自动化真实浏览器的操作流程。这允许脚本等待页面完全加载后再提取所需的 HTML 元素。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep def scrape_with_selenium(): options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options) try: url = "https://h5.waimai.meituan.com/" driver.get(url) # Wait until the page is fully loaded and dynamic content has been rendered. sleep(5) elements = driver.find_elements(By.CSS_SELECTOR, ".restaurant-item") restaurants = [] for element in elements[:10]: # Limit to top 10 items for demonstration purposes name = element.find_element(By.TAG_NAME, "a").text.strip() address = element.find_element(By.CLASS_NAME, "address").text.strip() restaurant_info = {"name": name, "address": address} restaurants.append(restaurant_info) print(restaurants) finally: driver.quit() scrape_with_selenium() ``` 这段 Python 代码实现了基于 Chrome 浏览器无头模式下的自动浏览指定网址,并收集前十个餐厅的名字及其地址信息。 需要注意的是,在开发过程中应当遵循各站点的服务条款以及法律法规的要求;同时也要注意频率控制以免给服务器带来过大压力[^3]。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

压码路

如果帮到你,可以意思一下吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值