python爬虫之字体反爬虫
原因
今天下午在抓取一个网页时,发现的网页字体反爬,这种情况一句话总结:即网页文本里的数字与网页上显示的字体不一致。为什么会出现这样的情况呢?原因是开发者在网页文本里引入了改变字体的文件。
然后可以看到,这是网页文本里的数字:
这是网页显示数字:
手段并不是太高明,这个动态网页比,难度还是不大的。
解决办法如下:
在请求完网页下载完网页文本后,找到网页文本里字体的源地址:
然后,把它下载下来并保存:
然后,你需要使用 fontTools这个库, pip install fontTools,使用这个库需要注意地方,就是你本地先要有一份字体文件,然后,你在爬取每个网页的时候,就会下载那个网页独占的字体文件,再与本地的做对比,就能拿到正确的数字:
local 为本地文件, online 为每次下载的文件,这样便能得到正确的数字了。
总的来说,就是爬虫过程中,加入了下载字体文件,并识别字体文件的操作。
下面附上代码:
# !/usr/bin/env python 3.6
# -*- coding: utf-8 -*-
# Author: fcj
# Time: 2019-04-29
# Description: 字体反爬from fontTools.ttLib import TTFont
import requests
from lxml import etree
import redef get_html(html_url):headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'',application/signed-exchange;v=b3','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Connection': 'keep-alive','Cookie'','DNT': '1','Host':','Referer':','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}content, wof_url = get_content(get_url=html_url, headers=headers)file_path = get_file(wf_url=wof_url)online_fonts = TTFont(file_path)base_fonts = TTFont('D:/3yl1dB.woff')tmp = exec_wof(online=online_fonts, local=base_fonts)nums = content.xpath('//div[@class="col-md-1"]//text()')an = get_ans(nums=nums, tmp=tmp)return andef exec_wof(online, local): # 得到对应的数字num_list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']eng_list = ['zero', 'four', 'eight', 'nine', 'five', 'six', 'two', 'seven', 'three', 'one']uni_list = online.getGlyphNames()[1:]uni_list.remove('glyph00011')tmp = {}for i in range(10):online_glyph = online['glyf'][uni_list[i]] # 返回的是unicode对应信息的对象for j in range(10):base_glyph = local['glyf'][eng_list[j]]if online_glyph == base_glyph:tmp[uni_list[i]] = num_list[j]return tmpdef get_wof(content): # 得到字体urlurl = re.findall('\("https.*?"\)', content)url = str(''.join(url)).replace('"', '').replace(')', '').replace('(', '')return urldef get_file(wf_url): # 下载保存字体文件data = requests.get(url=wf_url, verify=False)r = data.contentname = wf_url.split('/')[-1]path = 'D:/jiao cheng/'+namewith open(path, 'wb') as f:f.write(r)f.close()return pathdef get_ans(nums, tmp): # 得到答案an = 0for num in nums:num = re.findall('[0-9]', ''.join(num))real_list = []for n in num:real_list.append(str(translate_num(str(n), tmp)))real_num = int(''.join(real_list))an += real_numreturn andef get_content(get_url, headers): # 下载处理网页data = requests.get(url=get_url, headers=headers, verify=False)r = data.contentcontent = str(r, encoding='utf-8', errors='ignore')wof_url = get_wof(content=content)s = etree.HTML(content.replace('<br>', '').replace('\n', '').replace('</br>', '').replace('\t', '').replace('\xa0', '').replace('\u3000', '').replace('\r', ''))return s, wof_urldef translate_num(number, tmp):eng_list = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']number = eng_list[str(number) - 1]return tmp[number]if __name__ == '__main__':ul = 'asn = 0for index in range(1, 1001):hl = ul + str(index)asn += get_html(html_url=hlprint(asn)
python爬虫之字体反爬虫相关推荐
- 快手字体反爬虫?请给我10分钟,让我破了他
文章目录 前景摘要 字体反爬虫 突破字体反爬虫思路的探索 最终突破快手反爬虫代码 前景摘要 最近一个朋友问我,字体反爬虫的事,他发给我一个快手网站,我由于比较忙没回他,于是后来他说解决不了就要上scr ...
- Python 爬虫工程师必看,深入解读字体反爬虫
字体反爬虫开篇概述 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这 ...
- 深入细枝末节,Python的字体反爬虫到底怎么一回事
内容选自 即将出版 的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章--文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将 逐步放送 . 字体反爬虫开篇概 ...
- 【python实现网络爬虫(4)】实习僧网站信息爬取(字体反爬虫破解)
实习僧网站 实习僧网址,地址为北京,在搜索框输入"python",如下 实战解析 步骤一.建立for循环爬取前20页的内容 首先.查看翻页URL的信息,找规律 第一页:https: ...
- Python爬虫:字体反爬处理(猫眼+汽车之家)-2018.10
环境:Windows7 +Python3.6+Pycharm2017 目标:猫眼电影票房.汽车之家字体反爬的处理 -全部文章: 京东爬虫 .链家爬虫.美团爬虫.微信公众号爬虫.字体反爬.Django笔 ...
- 用前考虑清楚,伤敌一千自损八百的字体反爬虫
内容选自即将出版的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章--文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将逐步放送. 字体反爬虫开篇概述 在 ...
- 爬虫进阶-- 字体反爬终极解析
爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用python爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码.这种一般是网站设置了字体反爬 什么是字体反爬? 字体反爬虫: ...
- Python有道翻译爬虫,破解反爬虫机制,解决{errorCode:50}错误
一.引言 参考网址:https://tendcode.com/article/youdao-spider/ 当前成功时间:2019-6-28 转自个人开源博客:https://my.oschina.n ...
- 爬虫原理及反爬虫机制以及反爬虫方法的应对策略
爬虫原理及反爬虫机制 关于爬虫 爬虫原理 反爬虫机制 1.检验数据头User-Agent反爬虫机制解析: 2.访问频率限制或检验 3.蜜罐技术 反爬虫机制的应对方法 1.设定Request Heade ...
最新文章
- 2022-2028年中国体育用品行业投资分析及前景预测报告(全卷)
- c# for提升效率的写法
- Python编程基础:第二十一节 函数返回Return
- Spring框架中的设计模式(三)
- 人工智能的策略,如果国家优先发展”梦想成真”?
- Android 颜色渲染(九) PorterDuff及Xfermode详解
- mongodb mongoose 常用操作符号 整理
- python继承如何进行引用传递的区别_python在什么情况下会引用传递呢?
- python中递归函数写法_python中递归函数如何创建
- Linux删除安卓温控,RK平台关闭温度控制降频功能
- MySQL错误:ERROR 1221 (HY000): Incorrect usage of UNION and ORDER BY
- 软件测试岗位,BAT大厂面试题集锦
- 接口测试第二课(Fiddler实现APP抓包)
- 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 这 4 款电脑记事本软件,得试试
- 80psi等于多少kpa_压力单位PSI与kpa换算
- win10弹出计算机的内存不足,win10提示计算机显卡内存不足情况的解决办法介绍...
- Ja进av阶书籍推荐
- vue02——vue中v-XXX指令
- 对撞机 (Standard IO)