python爬虫之woff 超详细 woff字体反扒 起点woff爬虫 字体爬虫 起点中文网woff

前言:这一期,是针对起点中文网的作品详情页爬取,这是对woff反爬的入门,相对美团之类的字体反爬容易一些。短短的几十行代码,逻辑清晰!让你欲罢不能的关注我有人就要说了,我已经会爬取小说内容,干嘛要爬它,我还是那句话,一切为了提高自己技术!

一:分析页面

今天的主角就是《明朝败家子》这本书确实写得很不错!代入感很强,最主要喜欢大明王朝!额~跑题了!🐷

1)打开开发者工具,看到这儿字体显示不出来,请求出来也是一个&#xxxxx;这儿就是反扒机制:woff

2)woff文件一般都在css里面:

二:解题步骤

1)我的思路就是先保存HTML和woff(因为有点懒,懒得去把字爬出来,保存html文档简单快捷)

建议:不要学我,xpath这儿我直接复制浏览器的,图方便,还是自己弄,锻炼一下

记得保存的时候需要用“utf-8”不然有可能乱码

import requests
from lxml import etree
import re
from fontTools.ttLib import TTFont


def get_html_woff():
    # 保存html文档
    url = "https://book.qidian.com/info/1011705052"
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
    }
    response = requests.get(url, headers=headers).text
    txt = open("起点.html", "w",encoding="utf-8")
    txt.write(response)
    txt.close()

    # 保存woof文档
    woff = etree.HTML(response)
    woff_file = str(woff.xpath("/html/body/div/div[5]/div[1]/div[2]/p[3]/em[1]/style/text()"))

    woff_url = re.findall("url\('(.*?)'\)", woff_file)[1]
    woff_response = requests.get(url=woff_url, headers=headers).content
    fp = open("up_dian.woff", 'wb')
    fp.write(woff_response)

这儿使用的软件“FontCreatorPortable”查看woff字体   html的✪就是woff字

如果向看得详细一点,可以保存为xml文件,查看 

font.saveXML("xxxx.xml")

2)接下来也就简单了,用fontTools库读取woff,组成一个新的字典,替换掉html里的字体

(代码与上面连接的)

def new_html():
    font = TTFont("up_dian.woff")  # 打开woff文件
    font = font.getBestCmap()      # 以字典的方式返回woff

    new_value = {}
    d = {}

    woff_dict = {'.notdef': ' ', 'period': '.', 'zero': 0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5,
                 'six': 6,
                 'seven': 7, 'eight': 8, 'nine': 9}
    # 键和值反转
    for key, value in font.items():
        d[value] = key

    # 组成新的字典
    for i in woff_dict:
        for j in d:
            if i == j:
                new_value.update({"&#" + str(d[j]) + ";": woff_dict[i]})

    txt = open("起点.html", "r", encoding="utf-8").read()

    for ch in new_value.items():
        txt = txt.replace(str(ch[0]), str(ch[1]))

    new_html = open("new_起点.html",'w',encoding='utf-8')
    new_html.write(txt)



if __name__ == '__main__':
    print("[***]正在解析...")
    get_html_woff()
    new_html()
    print("[***]解析成功...")

3)成果:这不就出来了嘛!

结束语:嗯~是太简单了点

这也只是入门,“天晴了,雨停了,你又觉得你行了的”,去尝试美团吧!思路大致差不多。可以@我,出美团教程!

继续努力!

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白寸(渴~知)

钱包空空如也

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值