15《Python 原生爬虫教程》爬虫和反爬虫

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15《Python 原生爬虫教程》爬虫和反爬虫相关的知识,希望对你有一定的参考价值。

参考技术A 有的时候,当我们的爬虫程序完成了,并且在本地测试也没有问题,爬取了一段时间之后突然就发现报错无法抓取页面内容了。这个时候,我们很有可能是遇到了网站的反爬虫拦截。

我们知道,网站一方面想要爬虫爬取网站,比如让搜索引擎爬虫去爬取网站的内容,来增加网站的搜索排名。另一方面,由于网站的服务器资源有限,过多的非真实的用户对网站的大量访问,会增加运营成本和服务器负担。

这是一种最基本的反爬虫方式,网站运营者通过验证爬虫的请求头的 User-agent,accep-enconding 等信息来验证请求的发出宿主是不是真实的用户常用浏览器或者一些特定的请求头信息。

通过 Ajax,或 者javascript 来动态获取和加载数据,加大爬虫直接获取数据的难度。

这个相信大多数读者非常熟悉了吧,当我们输错多次密码的时候,很多平台都会弹出各种二维码让我们识别,或者抢火车票的时候,会出现各种复杂的验证码,验证码是反爬虫措施中,运用最广,同时也是最有效直接的方式来阻止爬虫的措施之一。

在识别到某些异常的访问的时候,网站运营者会设置一个黑名单,把一些判定为爬虫的IP进行限制或者封杀。

有些网站,没有游客模式,只有通过注册后才可以登录看到内容,这个就是典型的使用账号限制网站,一般可以用在网站用户量不多,数据安全要求严格的网站中。

我们可以在请求头中替换我们的请求媒介,让网站误认为是我们是通过移动端的访问,运行下面的代码后,当我们打开 hupu.html,我们会发现返回的是移动端的虎扑的页面而不是网页端的。

比如,我们可以设置一个随机的间隔时间,来模拟用户的行为,减少访问的次数和频率。 我们可以在我们爬虫的程序中,加入如下的代码,让爬虫休息3秒左右,再进行爬取,可以有效地避开网站的对爬虫的检测和识别。

代理就是通过访问第三方的机器,然后通过第三方机器的 IP 进行访问,来隐藏自己的真实IP地址。

由于第三方代理良莠不齐,而且不稳定,经常出现断线的情况,爬取速度也会慢许多,如果对爬虫质量有严格要求的话,不建议使用此种方法进行爬取。

可以通过动态的 IP 拨号服务器来变换 IP,也可以通过 Tor 代理服务器来变换 IP。

反反爬虫的策略,一直是在变换的,我们应该具体问题具体分析,通过不断的试错来完善我们的爬虫爬取,千万不要以为,爬虫程序在本机调试之后,没有问题,就可以高枕无忧了。线上的问题,总是千变万化,我们需要根据我们的具体反爬措施,来针对的写一些反反爬虫的代码,这样才能保证线上环境的万无一失。

python小课堂专栏python小课堂31 - 初识原生爬虫


python小课堂31 - 初识原生爬虫

前言

在上一期介绍了爬虫之前必会浏览器的开发者工具,忘记的童鞋可以在回顾一下:

​python小课堂30 - 爬虫之前必会的浏览器开发者工具.​

本篇文章将以实战来介绍一期 “原生” 爬虫,这里的原生是指使用 python 自带的请求库来完成爬虫,不借用第三方库(如 requests…贼好用!谁用谁知道…)。同时需要注意的是本次案例不使用任何爬虫框架去完成,大部分知识依赖于前面介绍的基础知识,少部分知识需要后续介绍学习。

PS:本期爬虫案例并不是最完善的爬虫,仅为了将爬虫的原理基础介绍清楚。要清楚,爬虫具有时效性,由于现在各大网站都有相关的反爬机制,所以也许现在写的爬虫代码此时适用,但过些时日就可能失效了,这点需要注意。本章仅供学习参考,请在遵守网络法律前提下进行相关操作

什么是爬虫?

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 – 百度百科

引用了下百度百科对爬虫的定义,接下来用笔者理解的大白话来说下:在咱们现在生活的这个时代,多数信息的传递都是以浏览器作媒介进行传播的,比如你要查寻一部电影,你首先得打开浏览器,然后打开百度(或谷歌或其他搜索引擎)的主页,在搜索框输入XXXX,回车后就会跳转到相应的网页,而这些所谓的搜索引擎,如百度,其本身就是一个大爬虫

【python小课堂专栏】python小课堂31

互联网就像一张蜘蛛网,你可以想象成每个网页就是粘在蜘蛛网上被包裹住的食物,在这张蜘蛛网上,不同网页组成了许多食物,食物的种类过于繁多,作为人类的你,想要从中挑选最美味,最可口的食物很是麻烦,于是创造出来一个可以行进于蜘蛛网上的“蜘蛛”,通过给蜘蛛下达规则性的命令,让蜘蛛来在这张网上帮你搜寻你想要的“食物”。

上面所讲的小故事,人类泛指开发者,蜘蛛泛指爬虫,而食物则泛指网页,或者说是信息。

最后一句话总结一下:爬虫,即在网络上,根据你所定义的规则流程,通过程序化将你想要的,有用的信息获取下来,这个程序称之为爬虫。

王者荣耀直播

这里就用笔者近期玩的游戏来做一次有趣的分享吧,王者荣耀。

众所周知,近几年随着物质生活的提高,相应精神物质也随之上升,越来越多的游戏被大家所认知,比如风靡一时的 dota2、 LOL等,近两年移动端的火热,例如吃鸡、王者荣耀等。。。随着游戏本身“社会地位”的上升,相应的越来越多人选择做起了直播,观众们可以第一视角观看直播的犀利操作,从中学习相关操作,提升自己的操作意识。

那这里呢,笔者就以王者荣耀的直播为例(因为在王者方面,笔者也算是上过王者的男人)废话不多说,下面进入正题。

明确信息目标

首先,写爬虫的第一步就是要明确自己的信息,你要从网络中获取怎样的信息?它们有怎样的特征呢?所以不急,先确定你要爬取(或者说是获取)的内容。

打开熊猫 tv 直播间,让我们来分析一下:

​https://www.panda.tv/,浏览器输入后,进入熊猫直播间,首页长这样:​

【python小课堂专栏】python小课堂31

但从首页上看去,除了中间有视频播放器以外,没有什么笔者想要的信息。但是可以看到首页旁边,有个分类按钮,点过去看下:

【python小课堂专栏】python小课堂31

可以看到,游戏的种类繁多,我们可以搜索下想要的王者荣耀,继续点进去看下:

【python小课堂专栏】python小课堂31

当前所有与王者荣耀直播的相关主播,随便找一个,比如下面这个:

【python小课堂专栏】python小课堂31

上图可知,有主播自己起的直播标题,还有主播的网名,以及当前的热度(小眼睛应该就是热度,小汽车好像是当前观看的人数)。嗯,笔者目标很明确,就是想抓取当前热度最高的主播,学习一波大佬的操作!

明确抓取目标:直播标题、主播网名、热度(小眼睛)。

分析网页结构

目标明确以后,来使用浏览器开发者工具分析下对应数据的网页结构,打开F12,分析如下:

直播标题:

【python小课堂专栏】python小课堂31

主播网名:

【python小课堂专栏】python小课堂31

热度(小眼睛图标):

【python小课堂专栏】python小课堂31

总结

好了,以上就是本篇对于熊猫直播网页结构的分析。

总结一下爬虫前需要准备的:

1. 明确目的,知道自己的需求是什么,想要什么样的数据。

2. 找到数据对应的网页,比如笔者这里想找王者直播。

3. 根据目的,分析出网页数据对应的 HTML 结构标签代码。

前三步是本章介绍的主要内容,消化一下!下面的步骤是实现的思路,放在下一篇文章去写吧…

TODO LIST (待做的…)

模拟 Http 请求,使用 Python 原生包对服务器发起请求,获取到服务器返回给我们的 HTML 代码。

通过返回的 HTML 代码,使用正则表达式等手段提取出我们想要的数据信息即可!(当然这里有些网站是肯定会遇到坑,现在没有哪个网站会让你轻轻松松获取信息的,比如斗鱼直播的数据…毕竟都 9102 年了!)

以上便是一个简单的小小只爬虫原理概念性的介绍了!下篇文章,尽请期待…


有想探讨python的同学,欢迎关注公号:migezatan.(咪哥杂谈)。


以上是关于15《Python 原生爬虫教程》爬虫和反爬虫的主要内容,如果未能解决你的问题,请参考以下文章

10《Python 原生爬虫教程》BeatifulSoup 的使用

python小课堂专栏python小课堂33 - 初识原生爬虫优化

Python爬虫入门教程 8-100 蜂鸟网图片爬取之三

Python 爬虫的入门教程都有哪些值得推荐的?

python小课堂专栏python小课堂31 - 初识原生爬虫

请教一个问题,怎么提高 python 爬虫的爬取效率