0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

中午不知道吃什么,用Python爬取美团外卖评论帮你选餐

马哥Linux运维 来源:YXQ 2019-03-26 15:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、介绍

朋友暑假实践需要美团外卖APP评论这一份数据,一开始我想,这不就抓取网页源代码再从中提取数据就可以了吗,结果发现事实并非如此,情况和之前崔大讲过的分析Ajax来抓取今日头条街拍美图类似,都是通过异步加载的方式传输数据,不同的是这次的是通过JS传输,其他的基本思路基本一致,希望那些数据能帮到她吧

二、流程

目标站点分析用浏览器打开美团外卖APP评论,F12

1.首先我们要找到我们想要的评论数据,在第一次“失败”的直接抓取网页源代码后,我们发现它是通过Ajax加载的,我们点击JS选项,可以发现JS项目里面的返回结果有我们想要的数据,勾选Preserve log,当点击查看更多评论时,后台(JS里)会出现新的Ajax请求,发现还有参数start和的变化,其他请求参数不变,start的参数变化是以10递增的,的参数变化可就让人摸不着头脑(这个时候我们也不要方,因为大多情况下没有规律的参数都是没用的)

2.经过我们对http://comment.mobilem.360.cn/comment/getComments?callback=jQuery17203361018749253357_1503362214558&baike=%E7%BE%8E%E5%9B%A2%E5%A4%96%E5%8D%96+Android_com.sankuai.meituan.takeoutnew&c=message&a=getmessage&start=0&count=10&_=1503362215647进行分析后发现它的标准式为‘http://comment.mobilem.360.cn/comment/getComments?&baike=%E7%BE%8E%E5%9B%A2%E5%A4%96%E5%8D%96+Android_com.sankuai.meituan.takeoutnew&start=’+str(i*10),i每次增加1,就包含新的十条评论的内容,所以我们通过改变i的值就可以拿到不同的数据

分析url的网页源代码,在源代码里有我们想要的评论数据,我们可以用正则(在这里正则还是比较好用的)把我们想要的信息弄下来

开启循环,批量抓取

保存数据至文本和数据库

#之前是这样处理的:def parse_one_page(html):    pattern2 = re.compile('"m_type":"0",(.*?),"username"', re.S)    items=re.findall(pattern2,html)    for item in items:        item = "{" + item + "}"        item=json.loads(item)        write_to_file(item)        print(item)        save_to_mongo(item)#皮皮哥告诉了我他的独家正则匹配方法可以匹配出来,这样的确获得的item没有编码问题def parse_one_page(html):    pattern = '"content":".*?"'    items=re.findall(pattern,html)    for item in items:        item =eval(item.split(':',1)[1])        write_to_file(item)        print(item)        save_to_mongo(item)#对一般正则写法获得的item进行的方法,这是从皮皮哥那里得知的,亲测有效def parse_one_page(html):    pattern = re.compile('rsion_name".*?"content":(.*?),"username"', re.S)    items=re.findall(pattern,html)    #print(items)    for item in items:        item = item.encode('utf-8').decode('unicode_escape')        write_to_file(item)        print(item)        save_to_mongo(item)
三、代码
#config.pyMONGO_URL='localhost'MONGO_DB='meituan'MONGO_TABLE='meituan'
import requestsfrom requests.exceptions import RequestExceptionimport jsonimport refrom day31.config import *import pymongoclient=pymongo.MongoClient(MONGO_URL)db=client[MONGO_DB]base_url='http://comment.mobilem.360.cn/comment/getComments?callback=jQuery17209056727722758744_1502991196139&baike=%E7%BE%8E%E5%9B%A2%E5%A4%96%E5%8D%96+Android_com.sankuai.meituan.takeoutnew&start='def the_url(url):    try:        response = requests.get(url)        if response.status_code==200:            response.encoding='utf-8'            return response.text        return None    except RequestException:        print('请求出错')        return Nonedef the_total():    html=the_url(base_url)    pattern1 = re.compile('"total":(.*?),"messages"', re.S)    Total = re.findall(pattern1, html)    Total=int(':'.join(Total))    #print(type(Total))    show='总计评论%d条'%Total    print(show)    write_to_file(show)    return Totaldef parse_one_page(html):    pattern2 = re.compile('"m_type":"0",(.*?),"username"', re.S)    items=re.findall(pattern2,html)    for item in items:        item = "{" + item + "}"        item=json.loads(item)        write_to_file(item)        print(item)        save_to_mongo(item)def save_to_mongo(result):    try:        if db[MONGO_TABLE].insert(result):            print('储存到MongoDB成功',result)    except Exception:        print('储存到MongoDB失败',result)def write_to_file(content):    with open('meituan_result.text','a',encoding='utf-8') as f:        f.write(json.dumps(content,ensure_ascii=False)+'\n')        f.close()def main():    Total=the_total()    Total=int(Total/10)+2    for i in range(Total):        url = base_url + str(i*10)        if the_url(url)!=None:            html=the_url(url)            parse_one_page(html)        else:            print('输完啦')    ps='PS:因为有些评论空,所以实际评论比抓取的少'   #这是我瞎猜的    write_to_file(ps)    print(ps)if __name__ == '__main__':    main()

四、最后得到的数据视图和文件

五、总结

1.程序报错很正常,不要一报错就问别人,先自己思考、百度

2.在数据类型处理方面的知识还要加强

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 源代码
    +关注

    关注

    96

    文章

    2953

    浏览量

    69721
  • python
    +关注

    关注

    57

    文章

    4860

    浏览量

    89661

原文标题:中午不知道吃什么?用Python爬取美团外卖评论帮你选餐!

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    能耗管理系统怎么?5 大核心功能帮你精准控能

    能耗管理系统怎么?5 大核心功能帮你精准控能 在 “双碳” 目标与企业降本需求的双重驱动下,能耗管理系统已成为制造业、服务业、建筑业等领域实现能源高效利用的关键工具。然而,市场上的能耗管理系统品类
    的头像 发表于 10-10 17:14 532次阅读

    淘宝天猫商品评论数据技术方案(附 python 代码)

    一、摘要 淘宝天猫商品评论API是淘宝开放平台提供的核心数据接口,用于获取指定商品的用户评价信息,包括评分、内容、晒图、追评等数据。该接口广泛应用于电商数据分析、竞品监控、用户反馈挖掘等场景,支持
    的头像 发表于 10-10 14:48 542次阅读

    快手电商 API 实现快手小店商品评论情感分析

    的API接口,允许开发者访问快手小店的数据,包括商品评论。本文将一步步指导您如何利用快手电商API获取评论数据,并实现情感分析功能。整个过程基于Python语言,结构清晰、易于操作,确保您能快速上手。 1. 准备工作:获取快手电
    的头像 发表于 08-26 15:08 369次阅读
    <b class='flag-5'>用</b>快手电商 API 实现快手小店商品<b class='flag-5'>评论</b>情感分析

    2025年逆变电源生产厂家有哪些?这篇文章,一看就懂!

    嘿,朋友们!是不是一提到 “逆变电源” 就头大?想给家里的光伏电站升级一下,或者给心爱的房车配个靠谱的“心脏”,却不知道2025年该哪家逆变电源生产厂家?别担心,我这就帮你把市场上的主流玩家捋一遍,保证让你心里有底,买得明白!
    的头像 发表于 08-22 10:45 2744次阅读
    2025年逆变电源生产厂家有哪些?这篇文章,一看就懂!

    编译错误: error: unrecognizable insn,不知道原因,请教!

    start_gui.exe生成的代码,再用SEGGER Embedded打开,编译有错,不知道是什么原因,请教各位大佬?
    发表于 06-23 14:45

    食堂消费机“断网断电也能用”的工作原理是什么?

    食堂最怕的是什么?大概就是效率太低,排队太长还有食品安全等问题。而在实际使用食堂消费机、刷脸支付
    的头像 发表于 05-13 10:14 453次阅读
    食堂<b class='flag-5'>团</b><b class='flag-5'>餐</b>消费机“断网断电也能用”的工作原理是什么?

    【国产信创CPU全攻略】分享国产CPU品牌排行榜!从排名到避坑!

    最近收到不少粉丝留言:“想换国产电脑,但国产CPU品牌太多,完全不知道怎么!”“信创CPU排名到底靠不靠谱?”今天咱们就来唠唠这个话题——国产CPU品牌有哪些?信创CPU怎么挑?附上一份接地气的「信创CPU排名一览表」,帮你
    的头像 发表于 04-14 14:34 4352次阅读
    【国产信创CPU全攻略】分享国产CPU品牌排行榜!从排名到避坑!

    光公司DDR,丝印4BC77 D8CJN,是什么型号

    在一块RK3576的开发板上,有一颗光公司的DDR,丝印4BC77 D8CJN,但不知道是什么型号。有谁知道吗?
    发表于 03-24 10:48

    探秘京东外卖幕后:地图&amp;轨迹技术探寻

    作者:京东物流 丁杰 最近,京东正式宣布进军外卖业务,迅速引发了广泛关注。当大家满心期待着品尝到更多美食、享受更便捷服务时,不知道是否留意到一个技术细节:未来在京东外卖的订单页面,骑手送
    的头像 发表于 03-18 14:01 2207次阅读
    探秘京东<b class='flag-5'>外卖</b>幕后:地图&amp;轨迹技术探寻

    上汽乘用车与达成战略合作

    近日,上汽乘用车与宣布达成了一项重要的战略合作。此次携手,标志着两大行业巨头将共同致力于资源整合与优势互补,旨在进一步挖掘汽车市场的巨大潜力,共同构建一个覆盖全链路的汽车业务生态。 这一战略合作
    的头像 发表于 01-21 15:22 1206次阅读

    ADS805E测量跳跃幅度很大,不知道是为什么?

    我按照手册上直流耦合连接电路,输入是1.5V~3.5V范围,SEL与VREF相连,430定时器输出转换时钟,结果测量直流时,AD测量结果在几个值之间跳跃,跳跃幅度很大,不知道是为什么,引脚电压控制3.3V。
    发表于 01-21 07:46

    测的值不定然后开始减小直到为0,不知道怎么回事?

    ADS1247对寄存器可读可写 可是配置完02这个地址的时(写0x30)在vrefout测不到2.048v,测的值不定然后开始减小直到为0,不知道怎么回事?
    发表于 01-21 06:27

    想用AMC1203做电流采样,AMC1210做SINC滤波,不知道这样可不可行?

    想用AMC1203做电流采样,AMC1210做SINC滤波,不知道这样可不可行? 网上有帖子说AMC1210有问题,你们不推荐采用AMC1210做SINC滤波,而是推荐采用CPLD做SINC滤波,不知道是不是真的?
    发表于 01-14 07:22

    校园点订餐外卖跑腿Java源码

    创建一个校园点订餐外卖跑腿系统是一个复杂的项目,涉及到前端、后端、数据库设计等多个方面。在这里,我可以提供一个简化的Java后端示例,使用Spring Boot框架来搭建一个基本的API服务。这个
    的头像 发表于 12-24 14:55 948次阅读
    校园点<b class='flag-5'>餐</b>订餐<b class='flag-5'>外卖</b>跑腿Java源码

    DAC7714应用于MCBSP模块,clk与cs都是模块内部产生的,LD信号不知道怎么给出?

    DAC7714应用于MCBSP模块,clk与cs都是模块内部产生的,但是LD信号不知道怎么给出,才能与cs同步,符合datasheet的时序。 我本身是判断XRDY标志位是否为1来决定LD信号,但是LD信号总是与CS信号有错位,转换错误.希望哪位大神指导一下,谢谢。
    发表于 12-19 08:09