Maison  >  Article  >  développement back-end  >  Robot d'exploration Python --- Anti-exploration des polices Autohome

Robot d'exploration Python --- Anti-exploration des polices Autohome

云罗郡主
云罗郡主original
2019-01-21 10:58:064693parcourir





Le contenu de cet article concerne le robot d'exploration Python-- -L'exploration inversée des polices Autohome a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère que cela vous sera utile.

Site Web cible : Autohome

Site Web cible : https://club.autohome.com.cn/bbs/thread/2d8a42404ba24266/77486027-1.html#pvareaid=2199101

Raison :

Aujourd'hui, mon ancien collègue m'a demandé de consulter un site internet : "Auto Home". Au début, je sentais qu'il ne devait pas y avoir de mesures anti-escalade, mais pendant l'opération proprement dite, je l'ai fait. a découvert qu'il s'agissait d'une police. Un cryptage anti-exploration est effectué.

Afficher le code source :

Robot dexploration Python --- Anti-exploration des polices Autohome

Je ne peux m'empêcher d'être surpris, s'agit-il d'un texte codé en UTF-8 ? J'ai donc effectué une conversion en ligne,

Robot dexploration Python --- Anti-exploration des polices Autohome

et j'ai quand même découvert grâce à la conversion que les polices que j'avais obtenues étaient toujours fausses. Ne croyant pas au mal, j'ai recollé l'article dans NotePad++ et j'ai trouvé :

Robot dexploration Python --- Anti-exploration des polices Autohome

Il s'avère que ces polices ne peuvent pas être collées. Eh bien, on ne peut que considérer que les paramètres de police sont anti-crawling. En voyant
dans le code source, pouvez-vous trouver quelque chose via myfont ? J'ai vraiment trouvé quelque chose à la fin

N'est-ce pas une police ..ttf ? Est-il crypté avec cette police ? Ensuite, téléchargez d'abord cette police pour voir si la supposition est correcte. Après avoir téléchargé la police, voici un outil pour visualiser les polices ttf : Font Creator (téléchargez par vous-même...) Téléchargez et ouvrez pour voir

Robot dexploration Python --- Anti-exploration des polices Autohome

Chaque caractère ci-dessus affiche son glyphe et son code de glyphe, donc je ne peux m'empêcher de me demander, comment ces deux polices sont-elles converties ? En parcourant de nombreux grands blogs, j'ai trouvé un package Python spécialisé dans l'analyse des polices, fonttools. Installez pip install fonttools par vous-même. Lien de référence : https://darknode.in/font/font-tools-guide/

# 那么便开始通过字体库进行解析
world = TTFont('./world.ttf')
# 读取响应的映射关系
uni_list = world['cmap'].tables[0].ttFont.getGlyphOrder()  # 'cmap' 表示汉字对应的映射 为unicode编码
print(uni_list) # 按顺序拿到各个字符的unicode编码
# 打印结果:
['.notdef', 'uniEDE8', 'uniED35', 'uniED87', 'uniECD3', 'uniED25', 'uniEC72', 'uniEDB2', 'uniEE04', 'uniED51', 'uniEC9D', 'uniECEF', 'uniEC3C', 'uniEC8D', 'uniEDCE', 'uniED1B', 'uniED6C', 'uniECB9', 'uniEDFA', 'uniEC57', 'uniED98', 'uniEDEA', 'uniED36', 'uniEC83', 'uniECD5', 'uniEC21', 'uniED62', 'uniEDB4', 'uniED00', 'uniED52', 'uniEC9F', 'uniEDDF', 'uniEC3D', 'uniED7E', 'uniECCA', 'uniED1C', 'uniEC69', 'uniECBB', 'uniEDFB']
# .notdef 并不是汉字的映射, 而是表示字体家族名称。
将映射列表转换成unicode的类型,因为自己文中获取的是字符串unicode类型的,当然你也可以转化为utf-8,不过你获取的文章内容也要转化为utf-8
unicode_list= [eval(r"u'\u" + uni[3:] + "'") for uni in uni_list[1:]]

Concernant le mappage, il y a en fait un petit doute entre utf-8 et unicode. Qu'importe ? Il est recommandé de se référer à Zhihu pour une explication détaillée :

https://www.zhihu.com/question/23374078

D'accord, tout a été préparé ci-dessus. Écrivons du code.

# coding:utf-8
import re
import requests
from scrapy import Selector
from fontTools.ttLib import TTFont
class QiCheZhiJiaSpider:
    def article_content(self):
        url = 'https://club.autohome.com.cn/bbs/thread/2d8a42404ba24266/77486027-1.html#pvareaid=2199101'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'
        }
        try:
            response = requests.get(url=url, headers=headers).text
            response_info = Selector(text=response)
        except BaseException as e:
            print(e)
        else:
            content = response_info.xpath('//div[@class="tz-paragraph"]//text()').extract()  # 获取列表的形式内容。
            # print(content)
            content_str = ''.join(content)
            # 紧接着获取字体的链接
            world_href = re.findall(r",url\('(//.*\.ttf)'\).*", response, re.M or re.S)[0]
            world_href = 'https:' + world_href
            world_content = requests.get(url=world_href, headers=headers).content
            # 对获取到的字体进行下载..........
            with open('./world.ttf', 'wb') as f:
                f.write(world_content)
            # 那么便开始通过字体库进行解析
            world = TTFont('./world.ttf')
            # 读取响应的映射关系
            uni_list = world['cmap'].tables[0].ttFont.getGlyphOrder()
            unicode_list = [eval(r"u'\u" + uni[3:] + "'") for uni in uni_list[1:]]
            world_list = ["右", "远", "高", "呢", "了", "短", "得", "矮", "多", "二", "大", "一", "不", "近",
                          "是", "着", "五", "三", "九", "六", "少", "好", "上", "七", "和", "很", "十",
                          "四", "左", "下", "八", "小", "坏", "低", "长", "更", "的", "地"]  # # 录入字体文件中的字符。必须要以国际标准的unicode编码
            for i in range(len(unicode_list )):
                content_str = content_str.replace(unicode_list [i], world_list[i])
            print(content_str)
if __name__ == '__main__':
    qi_che_zhi_jia = QiCheZhiJiaSpider()
    qi_che_zhi_jia.article_content()

Affichage des résultats :

Robot dexploration Python --- Anti-exploration des polices Autohome

Ce qui précède est toute l'introduction, j'espère que vous pourrez gagner quelque chose, plus Tutoriel vidéo PythonVeuillez faire attention au site Web PHP chinois.





Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn