python爬虫字体加密的解决

yizhihongxing

在进行Python爬虫时,有些网站会使用字体加密技术来防止爬虫程序获取网站内容。这种技术会将网站内容中的文字转换为特定的字体格式,使得爬虫程序无法直接获取文字内容。本攻略将介绍如何解决Python爬虫中的字体加密问题。

步骤1:获取字体文件

首先,我们需要获取网站使用的字体文件。我们可以使用浏览器的开发者工具来获取字体文件。在浏览器中打开网站,然后按下F12键打开开发者工具。在开发者工具中,切换到“网络”选项卡,然后刷新网页。在网络请求列表中,找到字体文件的请求,右键单击该请求,然后选择“复制链接地址”选项。将复制的链接地址保存到本地文件中。

步骤2:解析字体文件

接下来,我们需要解析字体文件,以便将字体文件中的编码映射到实际的文字内容。我们可以使用fontTools库来解析字体文件。在Python中,我们可以使用以下代码来解析字体文件:

from fontTools.ttLib import TTFont

font = TTFont('font.woff')
font.saveXML('font.xml')

在上面的代码中,我们使用TTFont类加载字体文件,并使用saveXML方法将字体文件保存为XML格式。在XML文件中,我们可以找到字体文件中编码和文字内容的映射关系。

步骤3:替换字体编码

现在,我们已经获取了字体文件中编码和文字内容的映射关系,我们可以使用这些信息来替换网站内容中的字体编码。我们可以使用正则表达式来匹配字体编码,并使用映射关系来替换字体编码。以下是一个示例代码,用于替换字体编码:

import re
import requests
from fontTools.ttLib import TTFont

url = 'https://www.example.com'
response = requests.get(url)
content = response.content

# 获取字体文件链接
font_url = re.search(r"url\('(.*\.woff)'\)", content).group(1)

# 下载字体文件
font_response = requests.get(font_url)
with open('font.woff', 'wb') as f:
    f.write(font_response.content)

# 解析字体文件
font = TTFont('font.woff')
cmap = font.getBestCmap()

# 替换字体编码
for code in cmap:
    content = content.replace('&#x{:x};'.format(code), cmap[code])

print(content)

在上面的代码中,我们使用正则表达式匹配字体文件链接,并下载字体文件。然后,我们使用TTFont类解析字体文件,并获取编码和文字内容的映射关系。最后,我们使用映射关系替换网站内容中的字体编码。

示例1:解决58同城字体加密问题

以下是一个示例代码,用于解决58同城字体加密问题:

import re
import requests
from fontTools.ttLib import TTFont

url = 'https://bj.58.com/pinpaigongyu/pn/{page}/?minprice=2000_4000'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url.format(page=1), headers=headers)
content = response.content.decode('utf-8')

# 获取字体文件链接
font_url = re.search(r"//vfile.meituan.net/colorstone/(.*\.woff)", content).group()

# 下载字体文件
font_response = requests.get('https:' + font_url)
with open('font.woff', 'wb') as f:
    f.write(font_response.content)

# 解析字体文件
font = TTFont('font.woff')
cmap = font.getBestCmap()

# 替换字体编码
for code in cmap:
    content = content.replace('&#x{:x};'.format(code), cmap[code])

print(content)

在上面的代码中,我们使用requests库获取58同城网站的内容,并使用正则表达式匹配字体文件链接。然后,我们下载字体文件,并使用TTFont类解析字体文件。最后,我们使用映射关系替换网站内容中的字体编码。

示例2:解决淘宝字体加密问题

以下是另一个示例代码,用于解决淘宝字体加密问题:

import re
import requests
from fontTools.ttLib import TTFont

url = 'https://s.taobao.com/search?q={keyword}&s={page}'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url.format(keyword='手机', page=0), headers=headers)
content = response.content.decode('utf-8')

# 获取字体文件链接
font_url = re.search(r"url\('//(.+\.ttf)'\)", content).group(1)
font_url = 'http://' + font_url.replace('\'', '')

# 下载字体文件
font_response = requests.get(font_url)
with open('font.ttf', 'wb') as f:
    f.write(font_response.content)

# 解析字体文件
font = TTFont('font.ttf')
cmap = font.getBestCmap()

# 替换字体编码
for code in cmap:
    content = content.replace('&#x{:x};'.format(code), cmap[code])

print(content)

在上面的代码中,我们使用requests库获取淘宝网站的内容,并使用正则表达式匹配字体文件链接。然后,我们下载字体文件,并使用TTFont类解析字体文件。最后,我们使用映射关系替换网站内容中的字体编码。

总结

本攻略介绍了如何解决Python爬虫中的字体加密问题。我们提供了三个步骤,包括获取字体文件、解析字体文件和替换字体编码。我们还提供了两个示例代码,别用于解决58同城和淘宝网站的字体加密问题。这些技巧可以帮助我们更好地了解Python爬虫编程,并解决字体加密问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python爬虫字体加密的解决 - Python技术站

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

相关文章

  • 浅谈python下tiff图像的读取和保存方法

    浅谈Python下TIFF图像的读取和保存方法 在Python中,我们可以使用多种库来读取和保存Tiff格式的图像文件,如Pillow、OpenCV等。下面将分别介绍这些库的使用方法。 使用Pillow库 读取TIFF图像 读取TIFF格式的图像文件,我们可以使用Pillow库的Image.open()方法。示例代码如下: from PIL import I…

    python 2023年5月18日
    00
  • PyTorch中torch.tensor与torch.Tensor的区别详解

    PyTorch中torch.tensor与torch.Tensor的区别详解 在PyTorch中,有两种不同的Tensor类型,它们分别是torch.tensor与torch.Tensor。这两种Tensor类型总体而言非常相似,用法也十分相似,但在细节与某些用法上有些许差别。本文将对这两种Tensor进行详细的区别与说明,帮助大家更好的理解和使用它们。 1…

    python 2023年5月13日
    00
  • python中小数点后的位数问题

    Python 中小数点后的位数问题在数值计算中是一个重要的问题,下面详细介绍如何控制Python小数点后的位数。 控制小数点的位数 Python中的浮点数默认以十进制显示,一般情况下小数点后只显示6位,如下所示: >>> a = 1.23456789 >>> a 1.23456789 如果我们想控制小数点后位数的话,一般有…

    python 2023年6月3日
    00
  • PyQt5编程扩展之资源文件的使用教程

    我来为您详细讲解“PyQt5编程扩展之资源文件的使用教程”吧。 什么是资源文件 在PyQt5中,资源文件是一种用于存储应用程序中的图像、音频文件和其它资源的文件。资源文件通常以.qrc为扩展名,其中.qrc是XML格式的文件。它允许我们把应用程序中的资源打包成一个文件,这样就可以方便地管理和访问它们。 资源文件的使用 1. 使用工具生成.qrc文件 我们可以…

    python 2023年6月5日
    00
  • python中Apriori算法实现讲解

    下面是关于“Python中Apriori算法实现讲解”的完整攻略。 1. Apriori算法简介 Apriori算法是一种经典的关联规则挖掘算法,它可以从大规模数据集中挖掘出频繁项集和关联规则。Apriori算法的核心思想是利用频繁项集的性质,通过逐层扫描数据集,生成候选项集,并通过剪枝操作去除不满足最小支持度的项集,最终得到频繁项集和关联规则。 2. Py…

    python 2023年5月13日
    00
  • python随机取list中的元素方法

    Python随机取list中的元素方法 在Python中,我们可以使用random库中的choice()函数来随机取list中的元素。本文将介绍如何使用choice()函数,包函数的参数和返回值,以及何使用它来随机取list中的元素。 ()函数 random.choice()函数用于从序列中随机选择一个元素。以下是示例,演示如何使用choice()函数随机取…

    python 2023年5月13日
    00
  • Python:替换列表中的 \n \r \t,不包括以 \n\n 开头并以 \n\r\n\t 结尾的列表

    【问题标题】:Python: replace \n \r \t in a list excluding those starting \n\n and ends with \n\r\n\tPython:替换列表中的 \n \r \t,不包括以 \n\n 开头并以 \n\r\n\t 结尾的列表 【发布时间】:2023-04-03 00:32:01 【问题描述】…

    Python开发 2023年4月8日
    00
  • 在Python中用多维系数数组对x点的赫米特级数进行评估

    首先,在Python中实现对x点的赫米特级数进行评估需要用到多维系数数组,可以使用numpy库进行操作。具体步骤如下: 1.导入需要的库 import numpy as np 2.定义函数 可以先定义一个函数来计算赫米特函数,然后再将系数数组与赫米特函数相乘得到赫米特级数在x点的值。赫米特函数可以用递归的方式求解,具体实现如下: def hermite(n,…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部