大众点评 爬虫抓取 数字文字解密

Python企业招聘百万级信息爬取

分析网页内容

原网址:https://www.dianping.com/zhengzhou/ch0
大家在抓取网页的时候会遇到各种问题,比如字体加密,但是当我爬取大众点评网站的时候发现,它里面的字体以及文字并不是不同的加密,利用css定位来显示所需要的文字和数字,如图:
大众点评 爬虫抓取 数字文字解密_第1张图片
所显示的只有span标签和class 并没有数字信息,
通过查看css信息就会发现在里面有个网址,
大众点评 爬虫抓取 数字文字解密_第2张图片
打开网址发现里面是数字信息,就是用来显示价格等信息的,
大众点评 爬虫抓取 数字文字解密_第3张图片

查看元素反复对比发现是使用css定位用来显示所需要的信息,span标签里的class的定位,
大众点评 爬虫抓取 数字文字解密_第4张图片
知道怎么解析了,然后就是怎么获取span里面class的定位信息,从页面上直接抓取有点不太显示,只能另辟途径了,
就在我查看页面的源代码的时候,发现这个网站,有这样一个注释 < !-- 图文混排css --> , 发现下面的css样式也是加载服务器里面的,然后就访问一下就出现了惊喜在这里插入图片描述
访问css网址
大众点评 爬虫抓取 数字文字解密_第5张图片
里面的信息也正是我们想要的,
这样我们就能通过解析这两个网址来编写代码进行文字和数字的解密,

编写代码实现解密

这里我就简单的写一下,具体解密的过程,所以编写代码不是很规范,也并没有爬取整个的网页,
根据上面的分析,需要先获取span标签里面的class 我们就以上面的两个为例进行一下解密演示:

		 # 9
       # 5

根据类名如:hkcc8 获取 该类名的定位数值

# 导的包
import re
import requests
import lxml.html


# 获取css页面的详情信息,用正则匹配得到css的定位数据
def css_info(info):
    # css 页面   这个网址是会变化的,修改为自己获取到的
    css_html = requests.get('https://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/6c3897952c363a4c22712329d2ff2e93.css').text
    # mty2pe{background:-180.0px -1664.0px;}
    # 正则,这里有个坑,刚开始使用+拼接,不能匹配
    str_css = r'%s{background:-(\d+).0px -(\d+).0px'% info
    css_re = re.compile(str_css)
    info_css = css_re.findall(css_html)
    # print(css_html)
    # print(str_css)
    # print(info_css)
    return info_css

输入:hkcc8 得到结果:475 64

接下来解析数字的网址

result = requests.get('https://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/d32298136aa6a4b7715bd2d11b41727c.svg')
tree = lxml.html.fromstring(result.content)
a = tree.xpath('//text[@y="41"]/text()')[0]
b = tree.xpath('//text[@y="88"]/text()')[0]
c = tree.xpath('//text[@y="126"]/text()')[0]

# x ,y 是得到的两个坐标点
# 调用上面的函数
x,y = css_info('hkcc8')[0]
x,y = int(x),int(y)
print('坐标',x,y)
if y <= 41:
    print('数字:',a[x // 12])
elif y <= 88:
    print('数字:',b[x // 12])
else:
    print('数字:',c[x // 12])

得到的结果如下:
大众点评 爬虫抓取 数字文字解密_第6张图片
大众点评 爬虫抓取 数字文字解密_第7张图片

这里只是简单的写一下解密的思路,,,希望对你能起到帮助
网页信息是经常变化的,所以还请根据自己当时访问的网页信息进行解码,,,

你可能感兴趣的:(python爬虫)