点击“开发者技术前线”,选择“星标?”

13:21 在看|星标|留言,  真爱

作者:想的美
一、介绍

朋友暑假实践需要美团外卖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.py
MONGO_URL='localhost'
MONGO_DB='meituan'
MONGO_TABLE='meituan'

import requests
from requests.exceptions import RequestException
import json
import re
from day31.config import *
import pymongo

client=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 None

def 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 Total

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)

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.在数据类型处理方面的知识还要加强

更多爬虫内容:

充气娃娃什么感觉?Python 告诉你!

为了给小女友挑合适罩杯的内衣,我用  Python 爬了淘宝内衣店的数据!

被女朋友三番两次拉黑后,我用 Python 写了个“舔狗”必备神器

用 Python 来找合适的妹子

如何用 Python 了解女朋友 的情绪变化?

---END---

选择”开发者技术前线 “星标?,内容一触即达。点击原文更多惊喜!

开发者技术前线 汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

历史推荐

Google 出品 Java 编码规范,强烈推荐!

三年半 Java 后端鹅厂面试经历

爱奇艺动态化框架 Qigsaw 正式开源!

点个在看,解锁更多惊喜!

午餐不知道吃什么?用 Python 爬美团App评论选餐!相关推荐

  1. python周末吃什么_中午不知道吃什么,用Python爬取美团外卖评论帮你选餐

    一.介绍 朋友暑假实践需要美团外卖APP评论这一份数据,一开始我想,这不就抓取网页源代码再从中提取数据就可以了吗,结果发现事实并非如此,情况和之前崔大讲过的分析Ajax来抓取今日头条街拍美图类似,都是 ...

  2. 看看你爱的他今天是什么‘颜色‘ -- Python爬取微博评论制作专属偶像词云

    简介:快来拿出你珍藏的pick star,用大家对他的爱重塑一个他吧.通过爬取微博评论,制作你的偶像图片词云,天天都是不重样的哦! 很多人学习python,不知道从何学起. 很多人学习python,掌 ...

  3. python爬取微博评论(无重复数据)

    python爬取微博评论(无重复数据) 前言 一.整体思路 二.获取微博地址 1.获取ajax地址2.解析页面中的微博地址3.获取指定用户微博地址 三.获取主评论 四.获取子评论 1.解析子评论2.获 ...

  4. python爬取歌曲评论_python 爬取歌曲评论的简单示例

    这篇文章主要为大家详细介绍了python 爬取歌曲评论的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣python 爬取歌曲评论的简单示例的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. ...

  5. python3爬取微博评论教程_用python 爬取微博评论,怎么打开微博评论下的查看更多|...

    怎样用python爬新浪微博大V所有数据 先上结论,通过公开的api如爬到某大v的所有数据,需足以下两个条件: 1.在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000, ...

  6. python爬取快手评论信息+快手号

    python爬取快手评论信息+快手号 潦草记录一下思路 从浏览器进行抓包,分析提交参数, 1.从手机中打开快手,找到需要爬取的视频,转发复制链接,从网页中打开 2.按F12进入开发者模式,进行抓包 3 ...

  7. python爬取app中的音频_Python爬取喜马拉雅音频数据详解

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python爬取喜马拉雅音频数据详解 一.项目目标 爬取喜马拉雅音频数据 受害 ...

  8. python爬取微博评论点赞数_python 爬虫 爬微博 分析 数据

    python 爬虫 爬微博分析 数据 最近刚看完爱情公寓5,里面的大力也太好看了吧... 打开成果的微博,小作文一样的微博看着也太爽了吧... 来 用python分析分析 狗哥这几年微博的干了些啥. ...

  9. python爬取豆瓣评论,并制作成词云

    一.爬取豆瓣热评 该程序进行爬取豆瓣热评,将爬取的评论(json文件)保存到与该python文件同一级目录下 注意需要下载这几个库:requests.lxml.json.time import req ...

最新文章

  1. SpringBoot+SpringSecurity前后端分离+Jwt的权限认证(改造记录)
  2. [笔记].关于Nios II的数据类型的一点想法
  3. C指针原理(6)-C内嵌汇编
  4. 平面设计背景素材|打造超酷的炫彩光束光效海报!
  5. mysql用户增删改
  6. eclipse maven项目 class类部署不到tomcat下_maven发布项目到远程tomcat
  7. Queue--队列(c语言简单实现)
  8. ArcGIS导出辖区边界点坐标
  9. 10个程序员可以接私活的平台和一些建议
  10. 罗格斯的计算机科学博士奖学金,罗格斯大学cs怎么样
  11. 信息服务器v6,服务器ipv6设置
  12. webpack打包后图片显示问题
  13. 怎么将html发布到天猫,天猫商家商品发布到淘小铺后台流程
  14. Unitary matrix 幺正矩阵
  15. VTK学习-第一个多柱体生成
  16. 安卓逆向——Dalvik虚拟机操作码
  17. 网络原理与交换机路由器应用
  18. 【数据库】聚合查询和联合查询
  19. python 播放mp3_python 播放mp3
  20. 软件测试面试题汇集(2)

热门文章

  1. 豆瓣上《特权和寻租的经济学》的书评
  2. 实体键和虚拟键不同的menu显示方式
  3. 代理服务器有什么作用
  4. lg空调代码大全解决_LG空调维修故障代码大全必备
  5. 软件开发不可与建筑类比
  6. nova4android10,华为nova4支持NFC刷公交地铁吗 华为nova4有NFC功能吗
  7. JavaScript-最大值和最小值的方法,正无穷和负无穷的表示方法
  8. 语音合成接口整理_各平台语音合成接口
  9. android开花动画,放下手机,听花开的声音 -- 花儿 の Time #Android #iPhone
  10. 【嵌入式基础】串口通信