盘点一些网站的反爬虫机制
因为 Python 语法简介以及强大的第三方库,所以我们使用它来制作网络爬虫程序。
网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。
网络爬虫的难点其实并不在于爬虫本身。
而是网站方为了避免数据被爬取,增加了各种各样的反爬虫措施。
如果想要继续从网站爬取数据就必须绕过这些措施。
因此,网络爬虫的难点在于反爬的攻克和处理。那么本文主要介绍一些网站的反爬虫措施。
1.妹子图这个网站的反爬虫机制比较简单。
当我们使用网络请求库下载图片时,该网站会对检查每个 HTTP 请求的 headers 头部中 Referer 字段。
它判断该字段是否为空,如果字段为空,那么不会返回正常显示的图片,而是返回一张带有“图片来自妹子网,请勿盗链”字样的图片。
遇到这种机制,突破也是比较简单。对每个 HTTP 请求,将页面的 url 地址填充到 Referer 字段中。
2.豆瓣几乎所有的爬虫新手都会爬取豆瓣练练手。但是豆瓣还是保持开放的态度,反爬虫机制做得还是很人性化。
它的反爬虫机制大概如下:
1、在没有携带 cookie 的情况下,如果某个 IP 短时间高并发请求网站,该 IP 会立马被 ...
程序员该如何过七夕?
说的七夕节,我们都会不由自主地想起牛郎织女的传说。
这是一个美丽且千古流传的爱情故事。它也是我们四大民间爱情传说之一。
传说是牛郎和织女之间情深意重,后来被王母娘娘强行拆散。
所以牛郎和织女只等到每年农历七月初七,走上由成千上万的喜鹊组成的桥才得以相会。
但不知从哪时起,七夕被人们普遍认为是情人节。但在中国历史上是没有这回事。
中国的传统情人节是元宵节(也称为上元节)。
在古代,平常女子特别是大家闺秀或小家碧玉,都是”三步不出闺门”。
只有到了元宵节,才能走出家门,才有机会和男生幽会谈情。
而七夕节又称乞巧节,即女子绣针线活的节日。目的是向织女乞求智慧和巧艺。
另外,古代很多文人都是在七夕抒发哀怨之情。
例如李清照的《行香子·草际鸣蛩》中写得:
星桥鹊驾,经年才见,想离情、别恨难穷。牵牛织女,莫是离中。甚霎儿晴,霎儿雨,霎儿风。
又如白居易的《七夕·烟霄微月澹长空》:
烟霄微月澹长空银汉秋期万古同。几许欢情与离恨,年年并在此宵中。
我们中国人向来很注重仪式感。既然七夕节是情人节这一说法已经深入人心。
那我们也随着大流过,不然会显得跟别人格格不入。
那么重点来了,七夕如何过呢? ...
使用 Python 生成二维码
新时代,人们有人信新的追求,自然而然会有新发明的诞生。
去年,在“一带一路”国际合作高峰论坛举行期间,20 国青年投票选出中国的“新四大发明”:高铁、扫码支付、共享单车和网购。
其中扫码支付指手机通过扫描二维码跳转到支付页面,再进行付款。
这种新的支付方式,造就二维码满天飞的现象。
那么让我们来扒一扒如何使用 Python 来生成二维码图片。
1.二维码二维码(2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。
它能将数字、英文字母、汉字、日文字母、特殊符号(如空格,%,/ 等)、二进制等信息记录到一个正方形的图片中。
因此,在转换的过程中,离不开编码压缩方式。
在许多种类的二维条码中,常用的码制有:Data Matrix,Maxi Code,Aztec,QR Code,Vericode,PDF417,Ultracode,Code 49,Code 16K等。
二维码在现实生活中的应用越来与普遍,归于功于 QR code 码制的流行。
我们常说的二维码就是它。所以,二维码又被称为 QR code ...
程序员应该懂点产品知识——竞品分析
最近产品经理和程序员打架的事件闹得满城风雨。
网传事情大概是这样: 一个产品经理给研发提出一个产品需求,要求 app 的主题颜色可以随着用户手机壳颜色改变而变化。
然后,两人直接干架。
出现这样的新闻,我们不能以看热闹的眼光来看待,应该积极思考背后的原由。
总所周知,产品经理和程序员的矛盾一直很存在。
既然矛盾一直存在,那我们程序员应如何优雅跟产品经理沟通?
沟通的内容往往离不开这些问题:这个需求是否要做?如果做,有什么意义?如果不做,有什么损失?
显然,我们要想一一回答这些问题,不能以技术的思维来回答。
要懂一些产品知识,从产品的角度切入来解答问题。
另外,产品经理有些时候提出这样的需求。
竞争对手的产品最近新增某些功能或者接口,但自家产品没有,需要补齐。
产品经理一定是将自己产品和竞品做对比之后才提出来的。
如果这部分工作由我们来做,我们要如何做对比?从哪些方面做对比呢?针对竞品分析,我自己说下自己的心得。
1.为什么要做竞品分析?除了前面讲到的几点原因,还有一个重要原因。如果我们做了一个竞品分析报告,然后递交给自己团队的 Leader,甚至是 CTO 或者老板。
可能会在一定 ...
Django 2.1 版本已经来袭
一个备受关注、很多人都在使用的软件,软件开发团队会定期发布新版本。
其主要目的是修复之前一些 Bug 以及新增一些新特性。
Django 作为主流的 Python Web 开发框架,当然也不例外。
在几天前,即 8 月 1 号,Django 官方团队发布 Django 2.1 版本。
新版本发布,我们可以不用急于更新替换,但要关注新版本的发布内容。
我看了下官方的发布公告,总结几个重要的点。
1.Python 版本支持Django 2.1 将不再支持 Python 3.4,最低要求 Python 版本是 3.5。
这也意味着 Django 2.0 是最后一个支持 Python 3.4 的版本。
2.模型新增查看权限这个功能,很多开发者都期待了很久。盼星星盼月亮,终于盼来了。
在以前的版本中,模型(Model)只有“增删改”权限。新版本增加查看(View)权限。这也意味着在 Model 的 Meta 配置选项中, default_permissions 属性默认值变为 ('add', 'change', 'delete', 'vi ...
搭建手机抓包环境
智能手机的普及,这使得移动互联网成为另一个流量巨头。
越来越多的公司也会转而直接提供 App 来展示内容。
例如微信以及其生态(微信公众号、小程序)、抖音等。
这也说明人们对于手机的依赖心更强。
那抓取 App 的数据显得更加有意义。
本文的主要内容是讲述如何搭建手机抓包环境。
1.工具准备1)一台电脑最好是笔记本电脑,因为笔记本电脑内置了无限网卡。如果你使用的台式电脑,你需要自己购买无线网卡。可以不需要购买专业的抓包网卡, 购买那些 USB 迷你无线网卡就满足使用要求。如果你不清楚买什么网卡,可以选择小米随身 WIFI。
2)一台手机3)抓包软件常用的抓包软件有 WireShark、Fiddler、Charles、miniproxy 等。
我这里使用 Fiddler 作为实例进行讲解,他们抓包的原理基本相同。看个人喜欢选择抓包软件即可。
4)软 AP 软件现在市面上有很多结合网卡能创建出软AP(Soft-AP)软件。
常见的软件有:猎豹免费 WIFI、360 免费 WIFI、WIFI 共享精灵。
2.原理分析1)对手机 App 进行抓包,究竟抓取什么内容?手机 App 离不开跟服务 ...
为什么说 TCP 协议是可靠的?
为什么说 TCP 协议是可靠的?
几张图带你彻底了解 TCP 协议。
TCP 协议是 TCP/IP 协议栈中的传输层的协议,TCP协议又叫传输控制协议(Transport Control Protocal)。
众所周知,它是一个可靠协议。因为它能保证接收端完整地接受到发送端发送的数据包,即保证不丢包。
那 TCP 协议如何保证不丢包呢?
这个是本文重点讲述的内容。
1.TCP 协议的作用ISO(国际标准化组织)曾提出一个 OSI 七层模型。
将网络的协议划分为 7 个层,从低到高排序是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
但是这个模型仅停留在理论阶段。
因为该模型过于庞大、复杂,以至于无法被广泛应用。
后来技术人员在 TCP/IP 等协议集问世之后,提出 TCP/IP 协议栈。该模型很贴近实际场景,所以被广泛的应用。
TCP/IP 协议栈一共分为 4 个层次。
从低到高依次排序是:数据链路层(有书籍称之为网络接口层)、网络层、传输层、应用层。
网络接口层:针对不同物理网络的连接形式的协议:以太网、FDDI 光纤 ...
分享一个爬取网站的小技巧
有时候,我们很想爬取一个网站的数据。
如果 PC 端的网页的反爬机制太强,我们可以换个思路。
现在很多网站为了满足手机浏览器能正常访问的需求,都会推出手机版的网页。
PC 端抓取数据有难度,我们可以从手机端入手。
你也许听说过,抓取手机 App 端数据就需要搭建手机抓包环境。
那么我们就要屁颠屁颠去抓包搭建?
哈哈,显然不用。
我给大家分享一个小技巧,可以节省搭建环境的时间。
我们的抓取目标是 Web 手机端页面数据,而不是 App 端内的数据。
因此,我们只要使用 PC 浏览器访问手机 Web 页面,就能继续使用 PC 浏览器进行抓包分析。
举个栗子,假如我要抓取淘宝首页的数据。我先用手机浏览器访问淘宝网站。
然后获取到手机端淘宝首页的 url 地址。
从图中,我们可知淘宝 web 手机端首页地址是:https://h5.m.taobao.com/。接着我们再用 PC 浏览器访问。
PC 端浏览器能正常访问,说明我们能使用浏览器自带的开发者工具来进行抓包分析。
Python 读取文本文件的内容
数据存储方式有很多种。
如果数据的数据量比较大、数据类型繁多且要求便于搜索,我们一般会选择存储到数据库中。
如果数据内容只是一些的文本信息,我们可以将数据存储到 TXT 、JSON、CSV 等文本文件中。
类似存储小说、日志内容等场景,一般是将内容存储到文本文件中。
数据已经存储到 txt 文件中,那该如何读取了?
本文的主要内容是讲解如何读取文本文件的内容。
1.打开文件文本操作可以想象成对水池进行加水和排水。
文本文件就好比一个存储水的水池,数据就类似水。
从文本文件中读取数据好比让水池排水。
在这过程中,我们需要一条“管道”才能从读取到数据。
在 Python 语言中,open() 函数就是这样的“管道”。当 open() 函数成功打开文件后,我们会得到一个 file 对象。
1file = open('One Day.txt', 'r')
但是操作文件经常会出现各种异常,例如文件不存在,文件不具备可读属性等。
因此,我们需要做异常处理工作。
这里推荐使用 with 语句,其内部已经实现异常处理相关的逻辑。
另外还有一个好处,我们还可以 ...
os.path 模块用法详解
总所周知,Windows 操作系统和 Linux 系统存在很多不兼容的地方。
文件路径就是一个明显的例子。
在 Linux 中,路径的分割采用正斜杠 /,比如 /home/monkey;
而在 Windows 中,路径分隔采用反斜杠 \,比如 C:\Windows\System。
我们在编码过程中,往往需要和文件或文件夹打交道。
如果程序中涉及到到路径操作,我们最好使用 Python 标准库中的 os.path 模块来实现。
这样能避免出现程序无法多平台运行的问题。
os.path 全称是Common pathname manipulations, 译为通用路径名操作。
其作用是提供操作各种处理文件名以及路径名的函数。
因此,本文的内容是讲述os.path模块中几个常见函数的用法。
1.获取文件(夹)绝对路径abspath(path) 函数返回的是 path 经过规范化的绝对路径。
假设在 D 盘中有 Downloads 的文件夹,该文件夹中有叫 cat.jpg 的图片。
我们要获取这张图片的经过转椅的绝对路径,可以在 Downloads 文件夹中打开 DOS 窗口,然后进入 Pyt ...