老司机教你爬大众点评(下期)
前情回顾
在上期,我们介绍了如何大规模爬取大众点评的店铺页面数据,以及第一种CSS加密方式,利用标签元素的
background
属性的坐标去对应svg文件源码找对应的字,今天在下期,我们将介绍一下评论的第二种加密方式以及如何爬去店铺的评分地址和人均消费。
CSS加密之二
上期的代码,如果你在爬了有两三个店铺之后,会发现这么一个事情,诶,代码报错?突然间一大堆错误,会疯狂报出来
list index
错误,原因肯定是匹配不到相对应的文字了,带着疑问的心情,我们定位到那个字,用浏览器F12检查一下,然后在查看svg,竟然发现svg变成了这个样子:
上面的字不再是整整齐齐,我们再次看看源代码看一下:
直接标签换成了 textPath
,同时坐标也是令人费解,x坐标是跟第一种那样计算,没有更改,但是这个y坐标却该如何进行对应?
CSS解密
一直盯了这个新的svg的textLength算了半天,找了半天规律也没找到,正当我想要放弃的时刻,突然灵机一动,发现新的svg多了一些关键的path元素:
path标签里面一共有这么两个属性, id
、 d
,在 d
属性中间夹了一个数字, id
的值也是一个数字,可以大胆猜测一下,如果将y坐标加23之后,去path标签里面找d属性的数字,是否对应的id是字所在的第几行,当我尝试了这么几个字之后,发现我的猜测是正确的,此刻得出结论。
得出结论
x坐标同样是代表这一行的第几个字,y坐标加23之后,去path标签中寻找id的值,则id的值为这个字所在行的
xlink:href
获得评分、人均消费、电话、地址
- 评分、人均消费、评论数目
我们发现,这些信息,在review_all页面没有加密,直接展示在标签中,直接解析即可
- 电话、地址
电话用了同样的小把戏,一些字隐藏在svg中,然后通过x,y坐标去找,这里直接给出答案,电话只需要将x坐标取正加6,获取的值在x中是第几个数字,那么代表第几个数,假设x坐标为8,则结果如下图所示:
地址的话,x坐标同样对应第几个字,y坐标需要加15,则获取对应的第几行