###大众点评数据获取---基础版大众点评是一个非常受大众欢迎的第三方美食点评网站。因此,本网站的数据非常宝贵。折扣、评论数、好评等数据很受数据公司欢迎。今天写了一个简单的大众点评列表页数据抓取demo。希望对阅读本文的朋友有所帮助。-环境和工具包:-python3.6-自建IP池(代理)(使用[ipidea]国内代理)-parsel(页面分析)-loguru(错误提示)让我开始探索之旅###的第一步,页面分析从图中可以看出,对应的数字都是方框。它到底是什么?下图是我简单处理后控制台输出的内容。并直接在html中右击查看网页源代码,可以看到如下内容```shell{'name':'MaisonLameloiseLameloise(ShanghaiCenter)','rating':'4.90','评论数':'11\ueeb5\ue753','人均消费':'¥\uf802\uf0b6\ue753\ue867','推荐':['鸭肝棒棒糖','前菜','甜品']}```\`\`\`外壳11?¥???\`\`\`换句话说,评估数据和人均消费价格数据应该被隐藏。这样焦作svg地图。那么如何获取这些数据。首先,我们需要找到他们打开网页后所引用的woff字体文件。在F12中,选择网络,然后再次选择菜单栏第三行中的字体。现在,杂项的网页访问内容中只有几个woff文件。下一步是打开这个文件。有两种打开方式-方式一:-先下载目标woff,右击访问内容,选择“在新标签页打开”下载woff文件-打开https://www.fontke.com/tool/c...,在线转换成ttf文件-打开http://fontstore.baidu.com/st...,在线分析新打开的ttf文件-你会看到这个:![]--通过查找字体:通过观察,我们发现在百度字体分析的文字代码中,都是以“unie”开头的。然后我们结合之前看到的编码内容,在字体文件中搜索,验证编码是否正确,是否与网页对应。显示数字。比如通过一一对应,我们很容易知道“\\ueeb5”是3,“\\ue753”是7,何必这么麻烦呢。目的有两个,一是验证这个假设,二是为下一篇复杂文章的内容做铺垫。果然在其中一个文件中找到了对应的字符编码,说明思路是对的——方法二:```python需要安装fontTools包,如果没有安装请(pipinstallfontTools)fromfontTools.ttLibimportTTFontdefget_xml(self):font=TTFont('dzdp.woff')font.saveXML('dzdp.xml')```-执行上面的方法(放在和脚本相同的目录下,改名字),然后会得到一个xml文件,然后用工具打开这个xml文件,直接全局搜索eeb5,很快就会找到这么一行。这样就会很清楚了。页面中的0xeeb5和ttf文件中的unieeb5是意思对应。再次证明0xxeb5是数字3-###构造映射字典从刚才的页面分析,我们已经知道“\ueeb5”是3,“\ue753”是7,那么我们在里面找其他的再翻页相关号码,[0-9]十个号码可以轻松组合。请记住,1不需要重构,.`\\\`shellself.woff={"\\uf0b6":"0",#"":"1","\\uf802":"2","\\ueb5":"3"\\ueb5e":"4","\\uf508":"5","\\ue867":"6","\\ue753":"7","\\uf0a6":"8"\\uf506":"9",}}`不要直接复制数据,评论的字体svg经常变化。需要根据当时的情况自己写```保存的是直接对数据进行处理分析。内容:\`\`\`\`pythondefget\_count(self,uncode\_list):try:count=“”forinuncode\_list中的uncode\_list:uncodes\_=uncode.replace.replace“',”).replace(“”,“”).replace(“”,“”).replace(“>“,”).split('>')#pprint.pprint(uncodes\_)foruncodes\_:如果self.woff.keys()中的uncs\_:cc=selfself.woff\[uncs\]else:cc=cc=uncscount+=ccreturncountexceptionextufione:logger.info(“'数字数字解析出现”)返回uncode\_list\_list\[0\]defrun(self):url='http://www.dianping.com/shanghai/ch10/r801'html=self.get\_html(url)shop\_el\_list=html.css("#shop-all-listli")forshop\_el\_list中的信息:item={}shop\_name=shop\_info.css("div.txtdiv.tita::attr(title)").extract\_first()item\["名称"\]=shop\_namescore=shop\_info.css("div.txtdiv.commentdiv.nebula\_stardiv.star\_score::text").extract\_first()item\["评分"\]=分数评论\_num=shop\_info.css("div.txtdiv.comment>a.review-num>b").extract()item\["评价数"\]=self.get\_count(review\_num)mean\_price=shop\_info.css("div.txtdiv.comment>a.mean-price>b").extract()item\["人均花费"\]=self.get\_count(mean\_price)#item\["类型"\]#item\["地址"\]recommend=shop\_info.css("div.txtdiv.recommend>a::text").extract()item\["recommended"\]=recommendprint(item)\`\`\`以上代码是这个demo中最关键的两个内容,一个是逻辑,一个是数字分析.这里我就不一一解释了,大家自己看吧###结果展示###缺点-如果review改成新版本的映射,我们得重做字典采集-只是简单对[0-9]十个数字的映射已经分析出来了,那我的demo中有type和address两个字段没有填数据,因为这两个字段有text映射,这个问题会在下一篇文章中解答,同时也会解决如何更改点评网站的动态字体,我们的Python爬虫丨大众点评数据爬虫教程(二)见~~~这篇文章是仅供交流分享,【未经许可请勿转载】