CN109241391A - 一种解决字体反爬的爬虫方法 - Google Patents
一种解决字体反爬的爬虫方法 Download PDFInfo
- Publication number
- CN109241391A CN109241391A CN201811101254.7A CN201811101254A CN109241391A CN 109241391 A CN109241391 A CN 109241391A CN 201811101254 A CN201811101254 A CN 201811101254A CN 109241391 A CN109241391 A CN 109241391A
- Authority
- CN
- China
- Prior art keywords
- font
- word
- file
- data
- primitive data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/103—Formatting, i.e. changing of presentation of documents
- G06F40/109—Font handling; Temporal or kinetic typography
Abstract
本发明公开了一种解决字体反爬的爬虫方法,包括以下步骤:获取数据源网站自定义图元数据库文件;对自定义图元数据库文件中图元数据标注标准唯一标识号;建立真字与图元数据标准唯一标识号的映射关系表;建立假字与图元数据标准唯一标识号的映射关系表;建立真假字映射关系表;反解析。本发明在解决字体反爬时具有持久性高、通用性强等优点,实现灵活获取和更新字体文件、灵活建立真假字映射关系、灵活的反解析假数据,保证最大限度的数据准确性。
Description
技术领域
本发明涉及网络技术领域,特别是一种解决字体反爬的爬虫方法。
背景技术
在爬虫开发过程中主要要解决的核心问题是突破数据源(主要是网站)的反爬技术,常见的反爬技术有IP访问限制、用户登录校验、前端数据动态加载等等,这些反爬技术由来已久,有现行的多种解决方案,但是字体反爬作为之前一种小众的反爬技术,逐渐在大的数据源网站开始流行使用,这种技术会导致爬虫程序获取的数据失去价值,而且目前还未有稳定可靠的解决方案。
字体文件常见的有符合ttf、woff等协议规范的文件,他们大多是由一系列字符的ASCII和供字符显示的图元数据的对应关系组成,并且图元数据一般绘制完成后不会再变更。
主流的字体反爬实现思路大体是采用前端的Css技术让固定的某些元素区域的文本数据采用事先定义好的自定义字体文件,这个字体文件区别于系统本身字体文件,它将系统本身字体文件中某个指向字符B(假字,图元数据显示为B)的ASCII指向了自定义字体文件中的字符A(真字,图元数据显示为A),所以当从后端传输数据B到前端时其实就是假的数据,只有使用自定义字体文件渲染以后,B对应ASCII找到自定义字体中的A,此时前端才会显示正确数据A。这种后端返回错误数据,由前端通过字体文件转换为正确数据的做法就是常见的字体反爬手段,而且在自定义字体的生成上技术也在不断演进,导致字体反爬难度激增。
在采用字体反爬后,爬虫程序将面临以下问题:
首先,如果不解决字体反爬,将会导致爬虫程序即便爬取到了数据,获取的数据中凡是采用了自定义字体的数据也全部是错误数据(混淆过的);
其次,如果要解决字体反爬,怎么确定哪些区域或者字段采用了自定义字体和怎样拿到自定义字体文件也是一个关键性问题;
再者,拿到了自定义字体文件后怎样建立真假字之间的映射关系,并且在爬虫程序中自动化的将假数据转换为真数据也需要认真设计;
最重要的是,如果数据源网站只是单纯的生成了一个自定义字体文件,那么通过手工建立一次真假字映射,然后用在程序中去替换假字,这种方式是可以直接解决字体反爬的;但是,目前部分网站已经采用了自定义字体生成随IP变化且每天每个IP自定义字体重新生成多次,这样等同于之前说到的A和B对应关系时刻都可能更新,变成A和C对应,这样建立一次A和B的映射关系只能支持同一个IP在短时间之内对假数据进行反解析,之后又会导致数据出错,这将是最棘手的问题。
发明内容
为解决现有技术中存在的问题,本发明的目的是提供一种解决字体反爬的爬虫方法,本发明在解决字体反爬时具有持久性高、通用性强等优点,实现灵活获取和更新字体文件、灵活建立真假字映射关系、灵活的反解析假数据,保证最大限度的数据准确性。
为实现上述目的,本发明采用的技术方案是:一种解决字体反爬的爬虫方法,包括以下步骤:
步骤S1、获取数据源网站自定义图元数据库文件:确定数据源网站的确采用了自定义字体,确定哪些元素区域采用了自定义字体,抓包找出元素区域以及字体文件下载URL。具体方法如下:(1)使用代理IP并抓包查看URL是否一致来判断是否存在不同IP返回URL不一致问题;(2)使用固定IP不同时段并抓包查看URL是否一直来判断是否存在存在固定IP定期更新问题。如若存在上述不一致问题,则根据请求响应提供的信息找到每次浏览器请求字体文件URL变换规律,以便根据此规律组装好URL下载该网站的图元数据库文件。
步骤S2、对自定义图元数据库文件中图元数据标注标准唯一标识号:根据步骤S1,下载好图元数据库文件,通过可视化工具和字体文件解析程序,根据每个图元数据(显示为真字)的对象信息(图元关键点,图元坐标等)计算出该图元的一个唯一标识号。
步骤S3、建立真字与图元数据标准唯一标识号的映射关系表:根据步骤S2可以得到自定义字体数据库中所有图元的唯一标识号,而且已经知道该图元就是显示在网页上的真字。所以,将该图元计算出的唯一标识号和该图元显示的图像(显示在网页上的真字)做一个映射关系。便可以得到一个图元数据唯一标识号和图元图像(即真字)的关系映射表。需要说明的是,因为自定义字体文件可能会按照固定IP定期更新而变化,或不同IP自定义字体文件而不一样,但是真字和图元数据唯一标识映射长期不变,所以我们可得出,只要多次获取固定IP更新的自定义字体文件、多次获取不同IP的自定义字体文件,通过手工不断补全真字和图元数据唯一标识的映射表,覆盖的字符越多后续爬取数据转换错误率就越小,所以此步骤需要不断的去重复步骤S1、步骤S2、步骤S3。
步骤S4、建立假字与图元数据标准唯一标识号的映射关系表:通过解析自定义字体文件,获取假字ASCII转换为本地系统字符(通过ASCII找到对应的本地字体文件中的图元数据,显示为对应字符,通过程序可直接将ASCII转换为字符),再找到假字对应位置的图元数据(真字图元数据,无法直接获取到图元数据代表的真字)计算唯一标识后与假字建立映射关系。
步骤S5:建立真假字映射关系表:每次获取一个新的自定义字体文件(不管怎么更新,A对应B或者A对应C),都能很轻松得到假字和真字图元数据唯一标识的关系,通过图元数据唯一标识作为桥梁,即可建立真字和假字的映射表。
步骤S6、反解析:将爬虫爬取到的进行过字体反爬的数据(即包含很多假字的数据)拆分为一个个字符后,一一传入真字假字映射关系处理接口,如果字符能够在映射关系中找到对应关系即进行转换,没有找到即维持原状(这表明还需要不断扩充真字和图元对象的映射表,还需要不断重复步骤S1、步骤S2、步骤S3工作扩充真字与图元映射表),这样将最后转换好的字符再拼接到一起,就成为真实数据。需要说明的是:有了一个比较全的真字和图元数据唯一标识映射表后进入正式流程步骤S4、步骤S5、步骤S6流程,因为自定义字体文件长期更新,所以步骤S4、步骤S5、步骤S6需要维持在一次处理范围内。
步骤S7、自定义字体文件存储删除更新:根据不同的数据源网站,字体文件更新策略不一样,可以根据情况制定自定义文件存储删除更新策略,例如:字体文件每一个小时更新一次,那么同一个IP的自定义字体在一个小时以内不会重复下载到本地,那么正式流程就会省去第1步,节约下载流量;当一个小时过去后,删除旧的所有IP的自定义字体文件,那么就要求强制执行第1步后才可以继续执行,达到更新目的。
本发明的有益效果是:
1、能够解决常见的字体反爬,通用性高;
2、能够解决自定义字体文件的频繁更新带来的问题,稳定性强;
3、只要建立好真字和图元数据唯一标识关系后,程序可以持久的解决字体反爬,持久性强。
附图说明
图1为本发明实施例的流程框图。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
实施例
如图1所示,一种解决字体反爬的爬虫方法,包括以下步骤:
1、获取数据源网站自定义图元数据库文件:
(1)爬虫抓取网页源代码:
①模拟浏览器抓取(可以等待网页动态数据加载完成);
②解析源代码确定字段及抓取值;
③确定哪些字段采用了自定义字体。
(2)自定义字体文件下载:
①通过查看网页源代码与实际网页显示确定哪些元素区域使用了自定义字体,找出自定义字体文件名称,自定义字体可以通过检查这些内容元素是否使用了诸如CSS中font-family这类自定义字体文件引用方式;
②监测网页源数据加载过程中字体文件加载的过程,找出字体文件下载URL;
③开发文件下载模块下载字体文件,保存到本地文件夹;
④如果字体文件存在固定IP定时更新、不同IP字体文件不同的策略,需要根据这些策略开发字体文件下载更新删除策略接口。
2、对自定义图元数据库文件中图元数据标注标准唯一标识号:
①可视化工具打开自定义字体文件,查看对应关系;
②解析字体文件并计算出图元数据的唯一标识号,常见的ttf或者woff字体文件都可采用多种编程语言进行解析;
3、建立真字与图元数据标准唯一标识号的映射关系表:
①人工将图元数据唯一标识号和对应的真字绑定,并新建属性文件(或一个对象)保存这个对应关系;
②真字和图元数据唯一标识号绑定需要进行多次字体下载、建立真字及图元数据关系,尽可能多的覆盖字符;
③根据自定义字体文件生成策略,为了覆盖更多的字符,此步骤可能需要执行多次。
4、建立假字与图元数据标准唯一标识号的映射关系表:
①常见的ttf或者woff字体文件都可采用多种编程语言进行解析,只要大概了解他们的相应文件规范即可通过程序解析出假字ASCII和真字图元数据的关系,假字一般是用ASCII标识的,所以需要用程序转换为本地使用的字体文件中的字符;
②计算图元数据唯一标识,根据位置信息建立假字字符和真字图元数据唯一标识号的对应关系,保存到类似Map这类数据结构中置于内存中待用。
5、建立真假字映射关系表:
①把真字字符和图元数据唯一标识号属性文件(或一个对象)读入内存数据结构如Map中,遍历假字字符和真字图元数据唯一标识号Map,通过图元数据唯一标识号拿到两个Map中的真假字,得出真字和假字对应关系Map。
6、反解析字体反爬数据:
①确定采用了自定义字体的爬虫数据字段,通过程序拆分为一个个字符;
②将拆分字符全部去检索真假字对应关系Map,查询出对应关系即进行真假替换,没查询到即维持原字符;
③将转换完成的数据重新拼接,并赋值给原来的字段。
7、自定义字体文件存储删除更新:数据去重存库,自定义字体文件存储删除更新,根据不同的数据源网站,字体文件更新策略不一样,我们可以根据情况开发自定义文件存储删除更新接口,例如:字体文件每一个小时更新一次,那么同一个IP的自定义字体在一个小时以内不会重复下载到本地,那么正式流程就会省去第1步中的第(2)步,节约下载流量;当一个小时过去后,删除旧的所有IP的自定义字体文件,那么就要求强制执行第1步中的第(2)步后才可以继续执行,达到更新目的。
有了一个比较全的真字和图元数据唯一标识映射表后才允许进入正式流程步骤5、6、7流程,因为自定义字体文件长期更新,所以步骤1、2、4、5、6、7需要维持在一次处理范围内,即单线程顺序处理。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
Claims (5)
1.一种解决字体反爬的爬虫方法,其特征在于,包括以下步骤:
步骤S1、获取数据源网站自定义图元数据库文件:确定数据源网站采用了自定义字体,并确定哪些元素区域采用了自定义字体,抓包找出元素区域以及字体文件下载URL;
步骤S2、对自定义图元数据库文件中图元数据标注标准唯一标识号;
步骤S3、建立真字与图元数据标准唯一标识号的映射关系表;
步骤S4、建立假字与图元数据标准唯一标识号的映射关系表;
步骤S5、建立真假字映射关系表:获取一个新的自定义字体文件,根据步骤S3得到的真字与图元数据标准唯一标识号的映射关系以及步骤S4得到的假字与图元数据标准唯一标识号的映射关系,通过图元数据唯一标识号作为桥梁,即可建立真字和假字的映射关系表;
步骤S6、反解析:将爬虫爬取到的进行过字体反爬的数据拆分为一个个字符后,一一传入步骤S5得到的真假字映射关系的处理接口,如果字符能够在映射关系中找到对应关系即进行转换,没有找到即维持原状,最后将转换好的字符拼接到一起,即为真实数据。
2.根据权利要求1所述的解决字体反爬的爬虫方法,其特征在于,所述步骤S1具体如下:
(1)使用代理IP并抓包查看URL是否一致来判断是否存在不同IP返回URL不一致的问题;
(2)使用固定IP不同时段并抓包查看URL是否一致来判断是否存在固定IP定期更新问题;
上述(1)与(2)中如果存在不一致,则根据请求响应提供的信息找到每次浏览器请求字体文件URL的变换规律,并根据URL的变换规律装好URL下载该网站的图元数据库文件。
3.根据权利要求1所述的解决字体反爬的爬虫方法,其特征在于,所述步骤S2具体如下:
通过可视化工具和字体文件解析程序,根据步骤S1下载的图元数据库文件中每个图元数据的对象信息计算出该图元数据的一个唯一标识号;其中,所述图元数据显示为真字,所述对象信息包括图元关键点和图元坐标。
4.根据权利要求1所述的解决字体反爬的爬虫方法,其特征在于,所述步骤S4具体如下:
通过解析自定义字体文件,获取假字ASCII转换为本地系统字符,再找到假字对应位置的图元数据计算唯一标识号后与假字建立映射关系。
5.根据权利要求1所述的解决字体反爬的爬虫方法,其特征在于,还包括以下步骤:
步骤S7、自定义字体文件存储删除更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811101254.7A CN109241391A (zh) | 2018-09-20 | 2018-09-20 | 一种解决字体反爬的爬虫方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811101254.7A CN109241391A (zh) | 2018-09-20 | 2018-09-20 | 一种解决字体反爬的爬虫方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109241391A true CN109241391A (zh) | 2019-01-18 |
Family
ID=65059821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811101254.7A Pending CN109241391A (zh) | 2018-09-20 | 2018-09-20 | 一种解决字体反爬的爬虫方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109241391A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109543454A (zh) * | 2019-01-25 | 2019-03-29 | 腾讯科技(深圳)有限公司 | 一种反爬虫方法及相关设备 |
CN109862031A (zh) * | 2019-03-13 | 2019-06-07 | 娄奥林 | 一种对加密反爬虫的方式方法 |
CN109871667A (zh) * | 2019-02-18 | 2019-06-11 | 北京创鑫旅程网络技术有限公司 | 数据内容保护方法、装置、服务器及计算机可读介质 |
CN111753494A (zh) * | 2020-07-06 | 2020-10-09 | 浪潮卓数大数据产业发展有限公司 | 基于selenium的woff字体解密方法及系统 |
CN111901332A (zh) * | 2020-07-27 | 2020-11-06 | 北京百川盈孚科技有限公司 | 网页内容反爬方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030065643A1 (en) * | 2000-05-09 | 2003-04-03 | Musgrove Timothy Allen | Content aggregation method and apparatus for on-line purchasing system |
CN102902703A (zh) * | 2012-07-19 | 2013-01-30 | 中国人民解放军国防科学技术大学 | 一种面向网络敏感信息的截图取证与锁定回访的方法 |
CN107590188A (zh) * | 2017-08-08 | 2018-01-16 | 杭州灵皓科技有限公司 | 一种自动化垂直细分领域的爬虫爬取方法及其管理系统 |
-
2018
- 2018-09-20 CN CN201811101254.7A patent/CN109241391A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030065643A1 (en) * | 2000-05-09 | 2003-04-03 | Musgrove Timothy Allen | Content aggregation method and apparatus for on-line purchasing system |
CN102902703A (zh) * | 2012-07-19 | 2013-01-30 | 中国人民解放军国防科学技术大学 | 一种面向网络敏感信息的截图取证与锁定回访的方法 |
CN107590188A (zh) * | 2017-08-08 | 2018-01-16 | 杭州灵皓科技有限公司 | 一种自动化垂直细分领域的爬虫爬取方法及其管理系统 |
Non-Patent Citations (1)
Title |
---|
ZMJ97: "电影院排片爬取", 《GITHUB HTTPS://GITHUB.COM/SOFTWARESAD/SPIDER/BLOB/MASTER/ROWPIECE/ROWPIECE/SPIDERS/ROWPIECESPIDER.PY》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109543454A (zh) * | 2019-01-25 | 2019-03-29 | 腾讯科技(深圳)有限公司 | 一种反爬虫方法及相关设备 |
CN109543454B (zh) * | 2019-01-25 | 2022-07-12 | 腾讯科技(深圳)有限公司 | 一种反爬虫方法及相关设备 |
CN109871667A (zh) * | 2019-02-18 | 2019-06-11 | 北京创鑫旅程网络技术有限公司 | 数据内容保护方法、装置、服务器及计算机可读介质 |
CN109862031A (zh) * | 2019-03-13 | 2019-06-07 | 娄奥林 | 一种对加密反爬虫的方式方法 |
CN111753494A (zh) * | 2020-07-06 | 2020-10-09 | 浪潮卓数大数据产业发展有限公司 | 基于selenium的woff字体解密方法及系统 |
CN111901332A (zh) * | 2020-07-27 | 2020-11-06 | 北京百川盈孚科技有限公司 | 网页内容反爬方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109241391A (zh) | 一种解决字体反爬的爬虫方法 | |
US7694282B2 (en) | Mapping breakpoints between web based documents | |
JP6488508B2 (ja) | ウェブページのアクセス方法、装置、デバイス及びプログラム | |
CN102567516B (zh) | 脚本加载方法及装置 | |
US20020188890A1 (en) | System and method for testing an application | |
US20050034065A1 (en) | Method and apparatus for processing content | |
CN104185845A (zh) | 用于提供网页的二进制表示的系统和方法 | |
CN101853158A (zh) | Widget窗口调整的方法及装置 | |
CN109948077A (zh) | 用户行为数据采集方法、装置、设备和计算机存储介质 | |
CN104375812A (zh) | 网页内容修改模板的构建方法、网页内容修改方法及系统 | |
CN106570750B (zh) | 基于浏览器插件的自动报税方法、系统及浏览器插件 | |
CN101441629A (zh) | 一种非结构化网页信息的自动采集方法 | |
US7069292B2 (en) | Automatic display method and apparatus for update information, and medium storing program for the method | |
Nederlof et al. | Software engineering for the web: the state of the practice | |
CN112395485A (zh) | 一种政策大数据挖掘方法、装置、计算机设备及存储介质 | |
CN102023998A (zh) | 用于处理网页以便在手持设备上显示的方法和装置 | |
CN104915404A (zh) | 访问失效网址的方法和装置 | |
CN100485675C (zh) | 信息处理装置、方法以及程序 | |
CN105094787B (zh) | 企业互联网应用的处理方法及装置 | |
CN111221711A (zh) | 用户行为数据处理方法、服务器及存储介质 | |
US20020138526A1 (en) | Javascript code optimizer | |
CN106469189A (zh) | 一种前端辅助转码的浏览方法和装置 | |
CN113836451A (zh) | 网页访问方法、装置、计算机设备和存储介质 | |
CN111859387A (zh) | Android平台软件漏洞模式的自动化构建方法 | |
CN115242638B (zh) | 可行触达的筛选方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190118 |