解决猫眼网反爬虫策略的爬虫 (2)

之后我们将模板xml里面的glyf中TTGlyph标签的name属性与打开的woff对应比较,得到这个数值列表(我这里woff和xml用的不是同一个,所以不要用这个比较!!!)

5

之后我们就可以根据glyf中TTGlyph的顺序得到解码数值的顺序,之所以要一一对应,是为了方便之后用下标索引。

num = [8,6,2,1,4,3,0,9,5,7] #这个值是直接硬编码进去的。 data = [] # 此处以解析xml的方式得到这个模板xml里面contour标签的内容。 xmlfilepath_temp = os.path.abspath("temp.xml") domobj_temp = xmldom.parse(xmlfilepath_temp) elementobj_temp = domobj_temp.documentElement subElementObj = elementobj_temp.getElementsByTagName("TTGlyph") for i in range(len(subElementObj)): rereobj = re.compile(r"name=\"(.*)\"") find_list = rereobj.findall(str(subElementObj[i].toprettyxml())) data.append(str(subElementObj[i].toprettyxml()).replace(find_list[0],'').replace("\n",''))

最后data里面是glyf中TTGlyph按顺序的内容,其中当然就是contour了,而它的下表与num中一一对应,也就是说,这时候给你一个contour的坐标内容,那就可以在data中查找它的对应下标,根据这个下标找到num中下标的元素,这个元素就是解码后的值了!!!

获得了模板,我们接下来就可以将请求这次页面时获得的woff转化为xml进行对应了。

font = TTFont("demo.woff") font.saveXML('to.xml') #本次请求下载的字体的contour new_font = [] xmlfilepath_find = os.path.abspath("to.xml") domobj_find = xmldom.parse(xmlfilepath_find) elementobj_find = domobj_find.documentElement tunicode = elementobj_find.getElementsByTagName("TTGlyph") for i in range(len(tunicode)): th = tunicode[i].toprettyxml() report = re.compile(r"name=\"(.*)\"") find_this = report.findall(th) get_code = th.replace(find_this[0], '').replace("\n", '') for j in range(len(data)): if not cmp(get_code,data[j]): new_font.append(num[j])

其中get_code就是这次页面时获得的字体数据的list元素之一了,通过循环遍历,最终得到了一个本次xml的对应数字的list : new_font 。

接下来获得一个编码与具体数字对应的font_list

font = TTFont("demo.woff") font_list = font.getGlyphNames() font_list.remove('glyph00000') font_list.remove('x')

此时,有了new_font中的具体数字和font_list中的编码值就可以完全解码这个页面中因为woff编码反爬虫的评分了。

# 匹配 star_woff = re.findall(re.compile(r">(.*)<"), str(titles[0]))[0].replace(';','').split('.') ;titles[0]是在第一步网页解析时获得的评分所在span for i in star_woff: getthis = i.upper() for j in range(len(font_list)): if not cmp(getthis,font_list[j].replace("uni","")): print(new_font[j])

这样就会输出评分的整数部分和小数部分了。虽然这里只是输出了这两个数字,但是反爬虫评分,票房,人数等数据均可以使用前一步的new_font和font_list进行处理,就不再加以阐述了。

7

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspwff.html