人生苦短,快学Python!

随着互联网的发展,Python的崛起,很多网站经常被外面的爬虫程序骚扰,有什么方法可以阻止爬虫吗?

阻止爬虫也就称之为反爬虫,反爬虫涉及到的技术比较综合,说简单也简单,说复杂也复杂,看具体要做到哪种保护程度了。

针对于不同的网站,它的反爬措施不一样,常见的反爬有User-Agent、ip代理、cookie认证,js加密等等,与之对应所保护的数据也不一样。比如某宝某猫等电商网站,那么店铺信息用户信息就比较重要了,像是某眼电影网站,它对于电影评分,票房等信息做了反爬处理。

我们今天的采集目标网站是某论坛,当对其文章的文本数据进行采集时,但是发现有字体反爬措施,就是有的文本数据被替换了。(文末附python学习资料)

一、需求分析

我们是需要爬取论坛文本数据,如下图所示:

部分网页源码展示:

我们发现文本数据是在网页源码里面的。

二、发起请求

import requests
url = "https://club.autohome.com.cn/bbs/thread/665330b6c7146767/80787515-1.html"
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
r = requests.get(url, headers=header)
html = etree.HTML(r.text)
content = html.xpath("//div[@class='tz-paragraph']//text()")
print(content)

然后得到如下数据(部分数据截图):

虽然在网页源码里面存在目标数据,但是通过requests简单请求之后发现有的文字被特殊字符替换掉了,此时再次查看Elenments对应的标签里的数据,如下图所示:

由图可以发现有的字被替换掉了,所以我们需要找到汉字被替换的方式,然后替换回去。

三、字体替换

我们知道系统字体一般都是xxxx.ttf的文件形式,如下图所示:

通过检查发现该网站中使用的字体对应的是myfont,这个很明显是网站为了反爬设置的自定义的字体:

了解css的伙计应该知道,网页的字体样式放在了style标签里面,如下图所示:

然后拿到url对应属性(xxx57…ttf),

//k3.autoimg.cn/g1/M02/D0/99/wKgHFVsUz1eAH_VRAABj9PS-ubk57…ttf

查看后发现是一个字体文件:

然后打开字体查看文件,把字体文件拖拽进去,如下图所示:(使用软件为FontCreator,可以查看字体的软件)

如果不想使用软件,可以打开百度字体平台网站,对应页面和软件打开是一样的

粗略一看其实发现不了什么,所以我们需要使用fontTools第三方库查看字体文件:

from fontTools.ttLib import TTFont
font = TTFont('./wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')
print(font.getGlyphOrder())

结果如下图所示:

然后我们发现比如在先前的特殊字符表中,

这三个字应该分别对应于,大 、的、一,首先大对应的后缀为edb8,在字体文件的输出的列表中中有一个uniEDB8,对应于第六个,然后再FontCreator软件中刚好对应第六个汉字大,如下图所示:

所以规律就是这样的。

四、数据抓取

1、先把对应的汉字打出来储存在一个列表中;

word_list = ['很', '五', '多', '远', '大', '十', '更', '了', '的', '矮', '不', '少', '九', '三', '八', '一', '右', '坏', '近', '着', '呢','左', '是', '长', '六', '上', '短', '七', '高', '二', '得', '好', '下', '和', '四', '地', '小', '低']

2、把字体文件对应的特殊字符保存到另一个列表中,边进行处理;

font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')
unilist = font.getGlyphOrder()
uni_list = []
for i in unilist[1:]:s = r'\u' + i[3:]uni_list.append(s)
print(uni_list)

但是问题出现了,结果如下:

我们发现出现了两个反斜线,所以需要使用eval函数简单修改:

font = TTFont('wKgHFVsUz1eAH_VRAABj9PS-ubk57..ttf')unilist = font.getGlyphOrder()
# print(unilist)uni_list = []
for i in unilist[1:]:# print(i)s = eval(r"'\u" + i[3:] + "'")# print(s)uni_list.append(s)

3、由于之前得到的不完整的文章数据是以一个列表的形式,所以需要把他拼接为字符串,然后使用replace(old,new),进行替换:

# ....前面代码省略
html = etree.HTML(result)  # result为请求网页源码content = html.xpath("//div[@class='tz-paragraph']//text()")contents = ''.join(content)

4、最后进行替换:

for i in range(len(uni_list)):contents = contents.replace(uni_list[i], word_list[i])print(contents)

结果如下,文字替换成功:

五、小结

通常在爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用 Python 爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码。这种一般是网站设置了字体反爬。

字体反爬是一种比较常见的反爬方式,因为很多网站的文字信息是比较重要的,像是前面提到的猫眼电影电影票房评分等数据,非常重要,网站维护者当然会把这种数据进行反爬处理,只要好好分析,还是能够抓取到目标数据。

在学习python中有任何困难不懂的可以扫码加入python交流学习,多多交流问题,互帮互助,这里有不错的学习教程和开发工具。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python必备开发工具

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、Python练习题

检查学习结果。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。

一次Python爬虫实战,解决反爬问题!相关推荐

  1. 《python爬虫实战》:爬取贴吧上的帖子

    <python爬虫实战>:爬取贴吧上的帖子 经过前面两篇例子的练习,自己也对爬虫有了一定的经验. 由于目前还没有利用BeautifulSoup库,因此关于爬虫的难点还是正则表达式的书写. ...

  2. Python爬虫实战一之爬取糗事百科段子

    点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...

  3. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  4. python爬虫实战之多线程爬取前程无忧简历

    python爬虫实战之多线程爬取前程无忧简历 import requests import re import threading import time from queue import Queu ...

  5. python爬虫实战之异步爬取数据

    python爬虫实战之异步爬取数据 文章目录 前言 一.需求 二.使用步骤 1.思路 2.引入库 3.代码如下 总结 前言 python中异步编程的主要三种方法:回调函数.生成器函数.线程大法. 以进 ...

  6. Python爬虫:字体反爬处理(猫眼+汽车之家)-2018.10

    环境:Windows7 +Python3.6+Pycharm2017 目标:猫眼电影票房.汽车之家字体反爬的处理 -全部文章: 京东爬虫 .链家爬虫.美团爬虫.微信公众号爬虫.字体反爬.Django笔 ...

  7. Python爬虫实战Pro | (1) 爬取猫眼电影Top100榜单

    在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的序号,片名,主演,上映日期,评分和封面等内容. 之前在Python爬虫实战(1)中我们曾爬取 ...

  8. Python爬虫实战练习:爬取微信公众号文章

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:徐洲更 为了实现该爬虫我们需要用到如下工具 Chrome浏览器 Py ...

  9. Python爬虫---猫眼字体反爬

    在做过汽车之家论坛的字体反爬过后,信心稍微增长点,那么索性找点字体文件反爬的网址,猫眼便是一个不错的网址,那么便开始搞起来. 目标网址 https://piaofang.maoyan.com/?ver ...

  10. 大众点评实战解决反爬

    前面讲了大众点评的反爬解决措施 今天就实际来一次 做一个大众点评所有商铺的名字 价格 评价 地址 推荐菜的爬虫 我在前面试过爬全网的 在几千条之后就会限制你再登大众点评 所以不用代理ip的话会被限制i ...

最新文章

  1. mysql数据库链接百分号_数据库百分号怎么用
  2. 【问链财经-区块链基础知识系列】 第二十八课 区块链如何助力万亿规模的供应链金融蛋糕
  3. gear s3刷android wear,三星gear s3怎么刷机 智能手表gear s3刷机方法【图解】
  4. OOo-MySpell 一个C++的拼写语法检查开源项目
  5. 对大学生使用计算机的看法英语作文,对社交网站的看法大学生英语作文 关于对社交网站的看法的大学生英语作文...
  6. 字符串标志“ u”和“ r”到底是做什么的,什么是原始字符串文字?
  7. SQLServer实战经验分享--ServiceBroker安全配置和使用示例
  8. 单片机原理及应用课程设计
  9. 利用VBB仿真——实现摇杆时钟
  10. XPS文件怎么打开?可以转成PDF格式吗?
  11. java梯形面积代码_Java面向对象练习题之梯形面积
  12. linux网络之哪些你不了解的DNS篇
  13. 学会网页制作,web开发,你需要掌握这3个编程语言
  14. 个人开发者用户福音,轻松申请微信商户、支付宝支付妙招
  15. python降序排序_python中如何降序排列
  16. 轮回 第二章 冷傲天
  17. html的国际标准智商测试,国际标准智商测试30题(含答案)
  18. 名动漫原画“室内设计”-张聪-专题视频课程
  19. python加上子类的特性_Python 中 Meta Classes详解
  20. Java 中文字符判断 中文标点符号判断

热门文章

  1. 亚马逊获取买家信息,店铺申请,ERP系统,MWS迁移SPAPI,SPAPI注册,PII权限获取
  2. 脉冲神经网络克服了类脑计算的硬件障碍,让AI更节能
  3. AVM环视:系统搭建整体流程
  4. 创始人面对投资人做Pitch十二禁
  5. linux--设置屏幕的锁屏时间
  6. mongo执行逻辑表达式_Mongo学习记录
  7. Charles的使用——打断点
  8. imx6 android4.4 Recovery添加从U盘升级功能
  9. 计算机专业毕业论文模板图文,计算机专业毕业论文提纲范文模板
  10. CTF之萌新web学习(命令执行2)