爬取 大众点评的 美食数据【一】

最近为了 通过爬虫 赚取外快,爬取了 大众点评的美食栏目的数据,中间也遇到了很多坑,列一下。

爬取 大众点评的 美食数据【一】_第1张图片

感谢万能的百度,其中最大的困难就是 封IP 和 字符加密 这两个问题。

封IP是在 我单线程爬取数据的时候发现的,因为高频率快速 访问 大众点评的 网页信息,导致 IP被禁止了好多天。【解决方案是 多线程爬取数据 + 随机数线程sleep解决】

 

重点戏应该就是 字符加密 这个了。

目前我这边遇到了一共是 数字加密 和 汉子加密两种。

数字加密 仿照网上看到 和 自己的理解,其主要途径就是 svg文件。

首先看 数字的加密

爬取 大众点评的 美食数据【一】_第2张图片

这是 数字的svg文件,

爬取 大众点评的 美食数据【一】_第3张图片

通过 谷歌浏览器可以看到  fjdti 代表的数字就是 5,其中它的css配置就是

.fjdti {

  1. background: -187.0px -88.0px;

}

解密的逻辑是 提取这里的 187 和 88 这两个数字。因为后面的解密和这两个值息息相关。

svg中的主要关心的内容是

88370400415798562495960747999122677128164654862035

27138613370663304843259425811177915135472833228069

40964359261580057908

那么如何找到 fjdti 是 5 这个数字?

第一步: 提取到了 187 和 88 这两个数字

第二步: 添加判断逻辑,找到第一个 y 大于 88 的那一行。文中 通过 y 这个值分别是 31、79、112.那么 88 这个值是 属于112这个y ,那么文本的内容就是 40964359261580057908。行已经找好了,但是还需要找到它属于哪一列,就需要用到另外一个参数 187.

187//12=15

下标从0开始,第15个值就是 5. 这样 数字解密这一块就解决了。

剩下还有文字解密

文字的svg分成两种内容,

一是style/text这样的格式

这种解码的方式 和 解析数字的一致。

二是style/defs/path 这样的格式

这种解码的方式就麻烦点了,看图片中的内容得知,这部分一共分成两部分.

一是 


 
 
 
。。。。。。。。。
 
 

二是

 
 
 
 
 
 
  喇抬涂惩趟孝搏嘴会碎歉物舅惕渠甜曲状脑列务索楼节攀淘慢展寇
  辛圣冠那祥俱跑和袍绒券昏欢课隶鸽潮耍堵埋族寄由棕谣装批驼弹愤爽侍嚼仙
  谜蚕赖跨外便多姓竹娱爷扮遍之压醉裳悠涨剥系盲王市栏令
  突绵奏亮姥剩锄坐接颗冒蓄局液蒸听绝折兼缓覆正盼雨希恶纳每奖猜劲赌速
  戴拖又管秘艺挎省徐拍翼危角足仓瓜沟火吓坚半驰浸慰勒
  酬或伸搂感抽哈查背静茂桂拼皂允帆主么稠途进捆束蒜桃遣现洪碧翁拔铺谁巩
  怎乞怜需腔胆星杯废打伏熟尸啄裂婚持宙默根袖柏触敲扔传言肠膨倘逃使疤预衔备
  药配伪府饿易揉腾仍花沉两社科蹦解宏叠喊胶边纷跃躲盘蝴撒旺贤构冲逗堡跪肥
  禾彩态锯五傍脾征叉居亚杜凳金款丝菜慈率利存供负文骗讽倒谊骤洗冬泼橘朗尿滩耀役黑具疏功
  弟道扫搬坑有谢呆竭敏胃其桑逢笋京茧探牛饱编肆志泰摄男拣尊译发夕如挨然远
  辩干漠鼠慕钉帜耻南岗六抖臣绣匀叙代低理帽性熊璃急杀薄蜂暂运乔占
  愉阔月责闻齐饼血晌处钩洁磁失羽另极雪你惑刃尝架终韵贞贯只魄十够载爪俩米疯
  墨考才棚龟奥汤疫睛优口钞连买宴拘藏悦扇床籍旨饲做殿闭腥乐刊签效趋寺区崖挺帘快择割犬阻欣岩党阅捏扶
  宪线斤都吵块鬼偏熄童却献示卫垫肩棋挡漫染烛央谈被馒到即驳仁搭租塑愈裕蹲虹穷普登卡流
  船捡勺霞卵冰蜜柴孤钥题指康患咱环堤筑空寒检罩懒扒雅墙养乘姜典霸疑紫丧醒恭酿八餐筒权哪彻充她麻
  撇仿巾商戏握帅鲁廉粘短狗羞射帐篇惠蜡闪盖非鱼场端欺悔燃观过霉点巴同营今春芦壮
  可否喷渐德穴举币说脸燥品身滥顿猎罗期鸦相忆斧冶贴卸饭校丑杠旅渣垄寸拌甚容斗广套匆候骨泡油
  返瑞境虫守培症给直毛摧添密协坊炕睬班纯苏千梅朽重困兵兰兄
  这帝者痒顾茄寿抹魔踩虎夏应史啊泽箩伯温增还咸犹结虚钢涉撤销锈己带军叮首透搁烧恒特眼英昆耗爱授厦术阁电
  肝蔽偷演甩猛倡疆塌扑汁稻豆孩葬糟乎斩盯绘受楚毯兽竿本池松苦诉摊士滨汽既差团轿滚趣恐私牌狡歪览
  咬斯辉济贪炭北勾壁姐踢走逮殖炎歌倍额战夜芝整绑躬洞积饰江
  云缩素须地神僚押畅僻淋情闷辽痰栽浑影域仇予锅章佩察冻朝喝师廊誓罚尚凡宅琴狐蜓气崇鸡更切铲甘
  路算类怖保贱某库越灌该址什领民犁虑浇粉讨沫档职滴蚀匙搅医停饶坏碰顶铁案辣微阴丢嫌欲
  奸学捧截哨贵象桌强部糖鲜姑霜烤硬未鹰蛾果丘盒立歇扭尾糕趴链郊次注招轰仗丹料
  旬再丰侦烈牙烦脊泳谎集卖葱燕国刑将聋鸣份俯贩侮涌愚框港数凑肉毫删庸姻晚宽剑壳暗精绞氧平
  锡虽的凶巡肃狱努峡休且纱永蹄拢烂矛亦弊鞭乏复违掘督看午熔
  借街例晕待议纵唤蠢吃申崭参铸质遭辞依畜枯疲求膝壶兴累妄左笑岂樱耐侵轨
  嫂许善肤醋屿恨狭沾淹灾填础迎稼木况哲挪劈嗽儿圈城散枪败渴妙剧得用为惹骆底认怨朵试呢榨椅
  审宁羊漂搞毅枣防双测卷裙筋颠垮赠泊响咐殃息泛杰度厚耕呜疼季小老齿像忧标菌包脏想独邮挖菊庭桨
  订尘反轧致移冈携馅滤秆皆胖担断较减段味三矩出喂室耽晒扎披洋惊迹匹禁慎话挠晋绿赏侧爹牵踏秩陡碑御始
  宗俭力良洽敞惭颂诱层丈傲鉴舱斜继抗华闲皮释佳讲嗓顺朱店馆毒艳宝鹿
  腐嫩盗副妖荣拨乡雹径粱浆田塘罐绸伟抄二敌统柄幻哗航慌郎届唱先
  棉弱谷碌迅砍奇尺遇柳屡栋机蛮孙铜痛势对睁溪罢葡杨争灶塔胁晶眉俘请各女形
  采蕉大掉袄昂摸核栗吴前融诗唉递读验慨堂引找序垒波礼畏俗丙棍哑咽露坡窄
  盈椒喉钱铅因安股弯破属扩昌络凭刮损拥没决清梦妹荷就缘瓦呈桐支吊
  威偶丛浙投友圆催符揪幅比缺很狂窑问货制入沃银计屠价悟
  秧近色刚后壤谱摔戒判睡矿头镜吞贷冷脆万规芬毁驶溉讯歼窗育撞沙活芒践矮贺旋
  光式辟封螺了望球赵捞陪石毙创联别迁赢庄夹旧害面禽跳魂
  来焦鸭坛亲专喜驾葛灰串龙种躺伞捷纠鹊貌辰植锋舍胳镰达艰姨婶昨钓汇划办启叛取偿蔬拾橡暑
  含荒房监蔑产高任缠坟跌捕起常忍体奔子聪幕勇纤衬芽李董条敬骑声降扯辱范词证香储误
  间器纽茫赤执治忌厨派世售恳钻肌您锻购浮糊戚澡侄锣尼灵株擦宵亏事肚谋随输垦妥农膊肺氏粮
  爸迈帮避爬舒搜描元转而宣拐膜写怠郑笔恢亡唐吩榆酒梁设信迷喘屈明
  龄坦土克娘滋朴叶恩倾确菠柿七织众亭弃蜘厘祝雁川怒茎富俊鞋斑牢
  巨袭厂母互户洲凯付渡忠著驻秒义台彼惰晓傅轮员瞎蓝舞博建律帖弄妻苗眠位叨往东缎浪名全闸日匠
  膀轻仪炸混纸在陶法故遥炊蛇坝久沿迟滑嘱企逼盛裹钟铃他槽泄们稳版塞天训碗膛贫历昼景斥经脉丁烫拿总贼服
  共河震饥究枕眨补显犯励据啦资皇掏纹必仅哀册获阶屑变旷享匪怀亩至眯旗叹峰猫逆盾砖紧右免呼向邀调也错但意
  扣略几辜仔暮模阿视操嫁片宰车句阀玩野湾续棵古掩兆狮满行
  并孟智痕拴准诞号恰此艘摩送伍萌蛋图绪援伐薪画追留伴掠猾票聚窜简梳针剃穗厉朋抚赔津定伶颈甲尤
  是旦动健骂慧键县膏瓣乃肿腿愿州革娇概乙炮官报遗飞伤湖公导新年倚杆何淡鼓娃
  炼西惯焰于语能挽妨榜扬维柱业下酷摇敢掌惧侨孔要际客悬袋泪臂座拉院徒刺佛般槐凉开泻固觉
  毕囊顷驴助费盟迫辅漆回表粥抓警归乖量命访耳缸介羡掀吗饺卧沸煮税玻饮梨辈脚太堆通番洒按拳
  亿玉惨蝶泉茶辨及软棒悼庆浊无山陆骄驱粪放换柜寨珠方纺吸奋福早祖胡盆傻颜消飘延辆锐目顽
  絮佣裤葵厕技穿死豪超滔组风宋少席称陷牲等墓稀浅已踪修汉心扁泥牧浴止纲岸手
  尖绩悉勤鄙括贿型恋不杏稍挥陈劣激虾剪码板吧恼若谨奉个扛箭隐
  挂音人四妇馋让邪赞第厅窃森捎叔丸筝盐着队站马张疮疾胀粗把欧窝游颤司辫雀荐攻召尽箱秤肯涛策晨逝
  妈枝源猴群告件卜翻委趁余梯虏红祸摆悲初录家武它海乌凤
  仆磨悄仰实旁旱诵狼怕凝暖衰赶舌关陕程周缴时灿笼蛛谅财茅竞合萍秀衣繁附循愁
  九加忙躁练蒙估政吹珍寻疗缝莫瞧化击书见格蓬念井救桥
  美排烟雷腰均遵砌住拜唇煌净屋级白替跟难横界树胸爆薯蛙拒撑
  乓单鹅造笛宇百筐映嘉施基自置晃答园拆析酸脖嚷蹈贝锁改苍巷研镇适详诊瞒炉袜吐倦材
  屯隙脱圾捐蚊抱绢网吨蚁孕工记劫长蜻汪绳赛剂骡弦幸生灭内润哥梢叼哭冤罪渗赚分勿芳叫提猪促限
  沈陵劳糠岁衡桶厌食中险莲杂勉煤腹一宾衫里思插捉异鼻障芹除婆
  贡削谦翅布选械残鸟胜退步宿幼牺蚂愧煎约水浩闯皱碍兔挣怪曾从撕岭堪
  晴暴胞细竟裁我病诸知原鞠巧秃扰岛教乱似当忘抢灯脂竖述挤赴君林湿抛样深刷殊咳
  承狸落瓶习弓筹懂浓锦贸唯忽狠僵抵笨刘上热播刻誉劝交肢瘦吼荡托咏烘酱摘距钳益些臭粒岔与
  奶哄护推腊所字拦临草振隔垂去好识乳隆页涝严蝇阳汗炒垃吉询论青盏伙成溜翠门项刀舰篮渔欠奴
  逐锤锹麦漏假榴揭则污作值呀闹真评乒村离末苹绍绕挑宫艇雕黎雄萄围收肾控完剖诚债夸丽
  萝筛阵庙父柔稿宜零照秋雾潜邻姿以夺惜舟纪黄升最靠遮
 

其中的处理逻辑是 通过正则表达式提取对应的内容

svg_text 就是 svg的所有的文本内容,通过requests.get api得到这份结果

      for x1 in re.findall('',svg_text):
          data_index[x1[0]]=int(x1[1])

# 这里得到的是 每个pathID 对应 最大行值。例如 1->31,2->74.。。。。67->2681

      for x1 in re.findall('(.*?)',svg_text):
          data_text[int(x1[0])]=(data_index[x1[0]],x1[1])

# 这里得到是每个pathID对应的文本内容,例如

1->"仙药鞠脑殃染盲涨战血艇寨舍谣商初相累告疆串摔剥鱼痒违帮辨恋旷眠谨贵档"
.....
3->"幻茎患召巨恼辆洲鄙及声首湾斯剖遇颂胡钱眉形易倡森重晨败粱煌滑斩缩僻缘她鼓壮厘蛋蔑努犁"...

接下来是将两份数据 联系起来,就是通过 path ID。

通过截图上的内容可以得知npoa7 对应的汉子就是 “山” 这个字。

其中对应css的 background 是 -168.0px,-2068.0px。 这样的确到两个值 168 和 2068。

然后去找 np开通的总css内容。

爬取 大众点评的 美食数据【一】_第4张图片

至于 如何 和 svg的内容绑定起来,可以看 span[class^="np"]中已经包含了 background-image,这里有对应svg的URL。

看到np的css中 width=12px,height=30px,

那么 168//12=14,这个14代表的是列的下标,但是行的小表还没有找到。
行的锁定 是通过2068 去锁定,找出 第一个 pathid对应的最大行值 大于 2068 的那一行。这就就锁定行了。

  是2092 大于2068,这样path ID就是52,其中path ID 52 的内容就是

亿玉惨蝶泉茶辨及软棒悼庆浊无山陆骄驱粪放换柜寨珠方纺吸奋福早祖胡盆傻颜消飘延辆锐目顽

行 和 列 锁定后就可以得到 山 这个字的结果了。

"亿玉惨蝶泉茶辨及软棒悼庆浊无山陆骄驱粪放换柜寨珠方纺吸奋福早祖胡盆傻颜消飘延辆锐目顽" 第14个字,下标从0开始就是 山

这样 就解决了 大众点评字符加密的问题了。过几天写下大众点评中 多线程爬取数据,这个相对简单,

给一张截图的数据爬取 大众点评的 美食数据【一】_第5张图片

有需要大众点评的数据的人 ,可以找我 1729874221,价格优惠

你可能感兴趣的:(爬取 大众点评的 美食数据【一】)