python某鱼主播粉丝的爬取
找到粉丝数据是如何传过来的
随机找一个主播的直播间打开,本人使用的是chrome控制台,定位粉丝html的标签位置。但这里定位后会发现页面展示的数据和html中展示的数据是不对的。这个时候能想到的是该数据应该是做了字体反爬。
再细心点会发现它标签中用到的属性style,后面跟上的字符传应该是调用对应字体库的链接中的某个参数。
找到调用的字体库
把第一步上字体库的url参数通过全局搜索,会发现它存在于一个长链接中,再细看长链接,有两个参数cfdc和ci这两个参数,其中cfdc对应的数据是粉丝数量需要经过字体库的映射一下关系,则是对应才是正确的粉丝数量,ci这个参数是对应的字体库的链接的参数
但是多刷新几次,会发现每次调用的字体库是不一样的,所以这里不能写死。要根据长链接返回的字体库参数拼接链接。才能获取到每次调用的字体库的链接。
解析字体库,找到对应关系
把每次获取到的字体库链接直接通过requests下载下来,保存为woff格式。然后转成lxml格式。打开lxml,很清楚的能看见里面对应的关系。然后通过python解析lxml对数据进行解析,获取到对应的映射关系即可。
附上解析字体的代码:
import requests
from fontTools.ttLib import TTFont
from xml.dom.minidom import parse
headers = {
'user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
}
def get_number_dict(keyword):
number_dict = {
'zero': 0,
'seven': 7,
'three': 3,
'four': 4,
'eight': 8,
'six': 6,
'five': 5,
'nine': 9,
'one': 1,
'two': 2,
}
dom = parse("lxml路径")
# dom = parse("/Users/zhulang/Desktop/nanodata_crawling/apps/douyu/woff/%s.xml" % str(keyword))
data = dom.documentElement
stus = data.getElementsByTagName('GlyphID')
font_dict = {
}
corr_number = []
error_number = []
for stu in stus:
corr_number.append(stu.getAttribute('id')