python超详细实现字体反爬流程

首先我们需要了解字体反爬的原理:通过在页面中加载自定义字体文件,然后在CSS样式中通过Unicode数值来替换文本内容,从而混淆文本信息,防止爬虫直接获取页面信息。因此,我们需要解决的是如何准确地将Unicode数值转换成正确的文本信息。

下面是python超详细实现字体反爬流程的攻略:

1. 获取页面字体文件

在爬取页面之前,我们需要先获取页面字体文件,通常可以在浏览器的开发者工具中找到。一般情况下,字体文件是使用@font-face引入的,我们可以在CSS的链接中找到相关信息。具体流程如下:

  1. 打开浏览器,打开开发者工具(快捷键一般为F12或Ctrl+Shift+I);
  2. 通过Network选项卡查看页面请求信息,找到font文件的请求;
  3. 点击该请求,可以查看到字体文件的具体信息,并将其保存为本地文件;

2. 解析字体文件

在获取到页面字体文件之后,我们需要解析其中的字形信息,也就是将Unicode数值与正确的文本信息对应起来。通常情况下,我们可以使用Python库fontTools来解析字体文件,其具体流程如下:

  1. 安装fontTools库,可以使用pip进行安装:pip install fonttools;
  2. 加载字体文件,并通过fontTools库中的TTFont类进行解析:font = TTFont("font.woff");
  3. 查看字体文件中的字符信息,其中包含了Unicode数值及对应的字形信息:font.getBestCmap();

3. 替换页面文本

在获取到Unicode数值与正确文本信息的对应关系之后,我们就可以将页面中的Unicode数值替换成正确的文本信息。这里有两种实现方法:

方法一:使用正则表达式

我们可以通过正则表达式的方式将页面中的字形信息保存下来,并与字体文件中的Unicode数值进行对应。具体流程如下:

  1. 通过正则表达式匹配页面中的Unicode数值:unicodes = re.findall(r"&#x(\w+);", content);
  2. 将Unicode数值与字体文件中的字符进行对应,并将其替换成正确的文本信息:text = "".join([font_map.get(int(u, 16), "") for u in unicodes]);

方法二:使用Selenium模拟浏览器操作

我们也可以使用Selenium模拟浏览器的操作,直接将页面中的文本信息获取出来,这样就可以避免由于正则表达式等原因导致的替换错误。具体流程如下:

  1. 启动Selenium,并打开要爬取的页面:driver = webdriver.Chrome(); driver.get(url);
  2. 获取页面中的文本信息:text = driver.find_element_by_css_selector(selector).text;

示例:

下面是两个示例,分别演示了通过正则表达式和Selenium模拟浏览器操作两种方式实现字体反爬的流程。

示例一:使用正则表达式

import re
import requests
from fontTools.ttLib import TTFont

# 获取页面字体文件
font_url = "https://example.com/static/font.woff"
font = requests.get(font_url).content
with open("font.woff", "wb") as f:
    f.write(font)

# 解析字体文件
font = TTFont("font.woff")
font_map = font.getBestCmap()

# 获取页面内容
url = "https://example.com"
content = requests.get(url).text

# 替换页面文本
unicodes = re.findall(r"&#x(\w+);", content)
text = "".join([font_map.get(int(u, 16), "") for u in unicodes])

print(text)

示例二:使用Selenium模拟浏览器操作

import requests
from selenium import webdriver

# 获取页面内容
url = "https://example.com"
driver = webdriver.Chrome()
driver.get(url)
text = driver.find_element_by_css_selector(".text").text

print(text)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python超详细实现字体反爬流程 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 计算NumPy数组中非NaN元素的数量

    计算NumPy数组中非NaN(Not a Number)元素的数量通常使用函数numpy.count_nonzero()来实现。count_nonzero()函数返回给定数组中非零元素的数量。对于NaN元素,它们的值在数学计算中无法确定,所以numpy中定义了专门的函数numpy.isnan()来判定一个元素是否为NaN,可以组合使用两个函数来处理。 下面是…

    python-answer 2023年3月25日
    00
  • 在自动化中用python实现键盘操作的方法详解

    在自动化中用Python实现键盘操作的方法详解 自动化是一种工具,它可以在程序运行时模拟用户输入输出,从而可以在人类存在的时候自动完成任务。在Python中,我们可以使用模块 pyautogui 实现键盘操作的自动化。在这里,我们将讨论如何使用 pyautogui 实现键盘操作自动化。 安装 pyautogui 在使用 pyautogui 进行自动化之前,必…

    python 2023年5月19日
    00
  • Python实现贪心算法的示例

    下面是详细讲解“Python实现贪心算法的示例”的完整攻略,包括算法原理、Python实现和两个示例。 算法原理 贪心算法是一种基于贪心略的优化算法,其基本思想是在每一步选择都采取当前状态下最优的选择,从而希望最终得到局最优解。贪心算法通常适用于满足贪心选择性质和最优子结性质的问题。具体步骤如下: 将问题分解为若干个子; 对每个子问题进行贪心选择,即当前状态…

    python 2023年5月14日
    00
  • Python绘制的二项分布概率图示例

    下面是详细的“Python绘制的二项分布概率图示例”的攻略,具体包含以下步骤: 步骤1:导入必要的库 首先,需要导入必要的库。在Python中,可以使用NumPy和Matplotlib库来快速地创建二项分布概率图。 import numpy as np import matplotlib.pyplot as plt 步骤2:定义二项分布函数 在这个步骤中,需…

    python 2023年5月20日
    00
  • python创建n行m列数组示例

    下面给出一个详细的Python创建n行m列数组的攻略。 1. 使用numpy创建n行m列数组 numpy是Python中一个很擅长处理数值计算的第三方库,它提供了很多方便的方法来创建数组。我们可以使用numpy中的zeros方法来创建一个n行m列的全零数组,代码如下: import numpy as np n = 3 m = 4 arr = np.zeros…

    python 2023年6月5日
    00
  • Python中实现常量(Const)功能

    实现常量(Const)功能是一种常见需求,Python中没有内置的原生常量类型,但我们可以使用一些技巧模拟常量的行为。下面是具体实现常量功能的攻略: 使用模块 一个常用的实现常量的技巧是创建一个模块,将需要常量的值定义在模块中,并将它们看作模块的属性,这样在程序中就可以使用该模块的属性来模拟常量。由于模块只会在第一次导入时被解释器加载,因此模块的属性在程序运…

    python 2023年5月30日
    00
  • Python基础学习之函数方法实例详解

    Python基础学习之函数方法实例详解,主要介绍了Python函数的基础知识、常用方法和实际应用。本文将从以下几个方面来进行详细讲解: 函数基础知识 在Python中,函数是具有特定功能的可重复使用的代码段。函数的目的是实现代码的模块化,将程序分成独立的部分,使得代码结构更加清晰、易于维护。Python中定义函数的语法如下: def 函数名(参数1,参数2,…

    python 2023年5月30日
    00
  • python字典如何获取最大和最小value对应的key

    首先,我们可以使用内置函数max()和min()来获取字典的最大值和最小值。但是,max()和min()在操作字典时只会比较字典中的key而不会比较对应的value。因此,我们需要利用Python的一些其他特性来找到最大或最小的value对应的key。 解决这个问题的一种典型方法是:将字典中的key和value反转,将原来的value作为新字典的key,原来…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部