cloudflare反爬机制学习

Posted naihe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cloudflare反爬机制学习相关的知识,希望对你有一定的参考价值。

https://www.dailiservers.com/bypass-cloudflare/

反爬表现:requests禁止而浏览器正常请求

关键字:Cloudflare 的反爬虫机制

思路:伪造ja3、修改tls至1.3版本,开启http2协议、更多。。。

python第三方库:pyhttpx、curl_cffi

字体反爬之快手

快手的直播列表页面的粉丝数用了字体反爬,之前在字体反爬之猫眼电影中提过这类问题的解决方案。
字体反爬的核心是找出字体之间不变的映射关系。

阅读步骤

  • 效果展示
  • 项目地址
  • 快手字体反爬机制图示
  • 不变的关系
  • 总结

效果展示

项目地址

快手字体反爬项目

快手字体反爬机制图示

不变的关系

每个请求字体文件不同,每个字体文件字体的笔画不同。
通过对比n个字体文件找到一个关系

  • 字体的笔画x轴并且on=“1”的关系是固定的,因此我们可以通过这个关系构造一个hash,然后和默认字体进行映射。
   def parser_contour(self, font_xml):
        for k, v in self.font_map.items():
            try:
                element = font_xml.xpath('//TTGlyph[@name=""]'.format(k))[0]
                _pts = element.xpath('./contour/pt')
                pts=[''.join(pt.xpath('./@x'))for pt in _pts if ''.join(pt.xpath('./@on'))=='1' ]
                if not pts: continue
                contours = [str(e) for e in pts]
                self.contour_to_font[md5(json.dumps(contours))]=v
            except Exception:
                raise Exception('字体改版,请重新更新settings中的配置,key:,val:'.format(self.path,k,v))

    def parser_map(self, font_xml):
        for element in font_xml.xpath('//TTGlyph'):
            try:
                name = ''.join(element.xpath('@name')[0])
                _pts = element.xpath('./contour/pt')
                pts = [''.join(pt.xpath('./@x')) for pt in _pts if ''.join(pt.xpath('./@on')) == '1']
                if not pts: continue
                contours = [str(e) for e in pts ]
                self.uni_to_contour[name.upper()] = md5(json.dumps(contours))
            except Exception as e:
                raise Exception('字体改版,请重新更新settings中的配置,error:'.format(self.path, e))

总结

  • 字体反爬的关键是找到唯一不变的映射关系

以上是关于cloudflare反爬机制学习的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫实践 —— 1.对反爬机制的认识

反爬机制

进击的反爬机制

常见的反爬机制及应对策略

python学习——xpath

反爬机制