爬虫入门教程②— 必备知识基础(一)反爬虫简介

上一节已经介绍过了一些爬虫的基本概念:爬虫知识入门「零」— 爬虫简介,这一节将会开始技术方面的介绍



这一节我们需要明确的是爬虫的一些目标。


  1. 爬虫的首要目标 — 正确获取到数据
    为什么只是获取数据呢?因为获取到数据之后,不管是解析还是存储,都是我们自己单方面的处理,并不需要目标网站的“配合”了。所以爬虫最复杂的部分,就在于获取数据。获取不到目标数据,不管你的解析代码写的多么好,你的存储速度多么快,那都是个没用的爬虫程序。这是我们必须要明确的一点。
    很多网站觉得自己的数据比较宝贵,会花时间去对付爬虫,从而达到保护自己的数据的目的。毕竟在这个数据为王的时代,谁拥有了数据,谁就有了更多的赚钱的机会。那么这些网站为了防止我们的小蜘蛛拿到他们的数据,会采取哪些措施呢?
     最常见的:图形验证码。我们的目标数据必须要登录后才能看到,但是登录又需要输入验证码。如果不能正确输入验证码先登录,那么我们就无法获取到我们需要的数据了,而网站也就成功达到目的了。普通的无差别爬虫遇到这种情况就到此为止了。比如搜索引擎,你没办法在百度搜到你的说说内容吧?
     最粗暴直接的:限制访问速度,这个也是非常常见的一种反爬虫的办法,网站服务端往往设置了一个访问速度上限,到了这个上限,那么一段时间内网站会拒绝你的访问。当然这个速度会比正常人浏览网页要快得多,比如1小时1000次或者1秒3次,都有可能。我们偶尔刷新网页过快,就有可能触发这个保护机制,然后网站就会显示你被拒绝访问了,而网页上总是会出现一个大大的数字—403,通常还伴随着一个单词——Forbidden
     最机智的:拖动滑块验证、选出图片中的颠倒的文字、数据加密后传输。为什么当时12306的变态验证码被无数人吐槽,那就是因为需要防止抢票程序对服务器造成高负荷,保证大家都是手动抢票的公平公正。这些情况的处理,往往会比较复杂,制作爬虫需要花费的精力也会更多。

    上面的就是网站常见的反爬虫措施了。而我们写爬虫的,是一定要和反爬虫斗智斗勇的。所谓道高一尺魔高一丈,既然网站能够想出这么机智的办法来反爬虫,那我们也可以根据网站的根本目的来反反爬虫。网站的根本目的?当然就是,把正确的内容展示给用户。这也是为什么不管反爬虫策略多么高级,还是会有挡不住的爬虫的原因。因为不能阻碍了正常用户的浏览使用,那么只要爬虫伪装得足够好,足够像人在操作一般,那就可以获取到想要的信息。
  1. 爬虫的进阶目标 — 优秀的爬取策略
    我们拿到一个目标之后,首先要做的,并不是开始盲目地写代码,而是制订爬取策略。
    a. 从哪个页面开始
    b. 怎么进入到我们的目标网页
    c. 如何从目标网页解析出我们的目标数据
    d. 解析后的数据如何存储
    e. 如何防止页面重复爬取
    以上都是我们编写爬虫必须要思考的问题。不下笔墨不读书,不想清楚不写代码。这也是我从写代码中领悟到的道理,做事情一定要有计划,你要知道你这一步在做什么,下一步要做什么,什么时候开始,什么时候停止。
    举一个制订爬取策略的例子吧。假设我们需要获取我们所在学校的所有学生的数据(姓名、学号、专业、班级、性别)。第一步是什么?当然是找一找网站到底有没有我们需要的数据啦。
    于是我们找啊找,找了半天,发现在教务处首页里面,有个查看学生名单的链接;
    点进去一看,哇,被骗了!这不是学生名单,而是是学校的所有专业网页,但是这些专业都可以点击;
    点进去专业信息的网页呢?我们可以看到这个专业的所有班级的链接了;
    于是我们继续点了班级的链接我们终于看到了学生信息的网页;
    网页很整齐,大概就是一个表格,如下。
    学生信息

    那么我们从这里可以明确到:目标数据是可以获取到的(因为我们能看到,哈哈哈嗝)。虽然我们不能在学生名单页面获取到所有的信息,比如专业班级。但这些信息都可以从之前的页面去获取,所以所有的数据,都是可以获取到的,那么我们开始制定策略了。
     首先从所有专业的网页开始。为什么是这个网页而不是教务处首页?因为教务处的首页没有有用的信息,而这个网页不仅可以帮助我们获取到专业名字,还有所有班级的网页的入口链接,我们又可以获取到班级信息,又可以从班级信息获取到学生名单的入口链接。
    那么这个流程,可以形成一个循环了:点开A专业的页面,获取到A专业的所有班级,再点开A专业Z班的页面,得到了A专业Z班所有人的信息之后,再返回上级,点开A专业X班的页面,再获取A专业X班的所有人的信息。直到A专业的所有的班级爬取完成。然后又从B专业开始重复。到这里,我们基本上对整个处理流程就有了个大概的轮廓了。
     下一步,当然是思考如何从网页里面,只获取到我们需要的信息,而过滤掉其他没用的信息。这一步我们称之为解析
     然后就是思考数据如何存储了,这个通常取决于用途,但是大部分时候我们都存在数据库,因为这样可以方便地通过工具转换成其他我们需要的格式。比如 txt文件、表格文件。
     页面重复爬取?tan90°。在本案例,不会有重复。因为我们是非常有条理,一层一层往下搜索的,并不会遇到有重复页面的问题。什么时候可能会遇到重复的页面呢?比如a网页有b网页的链接,b网页又有a网页的链接。你爬了a网页,发现并进入了b网页,又爬了b网页,发现了a网页,这时候就需要考虑怎么判断出a网页是我们已经爬过的了。
    虽然本案例页面不会重复,但是,数据却可能重复。比如由于教务处的疏忽,X同学原来在S班,后来转到了B班。而我们在B班的网页看到了X同学的信息,又在S班看到了X同学的信息。这当然会对后期的操作造成影响,我们就需要去掉这种重复的数据,怎么办呢?那我们就想一想爬取的这些数据有哪些特性,这个特性要是每个人都有,但是每个人又不一样,能够用来和其他人区别开的。名字?重名的可能性是存在的,不行。身份证号码?太棒了,只可惜我们获取不到呢。学号?完美!这是一个我们既能够获取到,同时也是每个人都独有的信息。在本案例中,我们就可以用学号来去掉重复的数据。
    那么问题到此就基本上解决了,我们也制定出了一个有效的策略了。剩下的就是编写代码了。写代码教程会在基础讲解完成之后再开始,敬请关注。
  1. 爬虫的高级目标 — 数量少却高效的代码
    同样的一个网站,不同的人写出来,会有不同的效率。A同学只用100行就搞定了,但是却运行了10分钟。B同学用了50行,时间竟然只用了5分钟。为什么人与人之间会有这么大的差距呢?(´థ౪థ)σ 嘤嘤嘤
     首先,非常重要的一个方面,那就是经验。熟能生巧,B同学可能拥有5年的写代码经验,A同学只有6个月。所以很可能B同学的代码逻辑会更加完整,思路也更清晰简洁,由此减少了很多不必要的流程,从而节省了代码量,节约了时间。
     另一个可能是辅助工具的选择,Python里面,写爬虫有很多非常优秀的库(别人写好的代码)可以给大家使用,A同学的10行代码完成的功能,B同学调用一个A不知道的库,一行就OK了,并且功能还比A强大,速度还更快。积少成多,最后量变发生质变。所以,记住这句话:不要重复造轮子。当然如果你造出来的轮子,还没别人的好,那就更不要了emmmm。
    经验我们除了多写代码没办法改变,而使用友好快捷的工具,是我们追寻的目标。这也是编程的艺术,简单优于复杂。

本节我们简单介绍了
常见的反爬措施
编写爬虫程序前的准备工作
编写程序需要注意的事项

有问题欢迎小伙伴们提出来哦~

 


传送门:

下一章
爬虫知识入门③— 必备知识基础(二)HTTP请求简介

所有的章节:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,057评论 25 707
  • 声明:本文讲解的实战内容,均仅用于学习交流,请勿用于任何商业用途! 一、前言 强烈建议:请在电脑的陪同下,阅读本文...
    Bruce_Szh阅读 12,648评论 6 28
  • 1.NSURLSession 本节主要涉及NSURLSession的两个get请求/一个post请求NSURLSe...
    SoftKnife阅读 2,498评论 9 19
  • 在职场和生活中,经常会遇到一些玻璃心的人。跟有这样特质的人相处起来,有时要小心翼翼,因为不知道你的哪句话哪个眼神就...
    阑珊marina阅读 862评论 0 1
  • 今日导读 昨天我们通过电梯问题,引发了两个针对“提问”的思考,即明确提问者和问题的本质。那么,定义了“问题”之后,...
    逆流而上的刘青荣阅读 383评论 4 1