资讯专栏INFORMATION COLUMN

爬虫的一些知识罗列

elva / 3035人阅读

摘要:蛮荒时代遇到加密的网页爬取是将混淆之后的加密代码强行还原为代码,很累现在有了这个方便的库,能够轻松很多,转工具移动端抓取替代网页端不少网站移动端的接口访问比网页端简单多,反爬也弱一些,比如拉钩网。

什么是爬虫

用我自己的话来总结就是通过模拟客户端访问服务器获取数据的工具。爬虫的简易模型如下:

网站服务器是我们要访问的目标,主要用来制定访问规则(也就是我们应该如何模拟可以访问该服务器的用户以及如何访问网站上的数据)

爬虫通过http或者https协议与网站服务器交互

我们做的主要工作是在定制爬虫脚本,尽可能的模仿客户端的访问

本地存储的选择很多,可以是文件的形式,也可以存储到数据库中

爬虫可能会涉及的技术罗列

可以当做检索的清单

图片是我以前学习爬虫的时候收藏的,具体来源已经记不得了

下面这张是简易版的参考,打钩的是我已经使用过和掌握的

爬虫技巧分享

由于网站开发人员使用技术不同和网站运维人员对访问的限制没有固定的爬虫模板,而且爬虫是需要长期维护的工程,一旦网页中的一个class属性发生改变或者api接口参数变化都需要修改爬虫。但是一些技巧是可以借鉴的。

robots.txt

robots.txt是与搜索引擎约定的君子协议,他能够可我们提供一些网站的信息。 下面是掘金的robots.txt ,我们可以收获以下信息

允许的User-agent是匹配所有,有时候爬虫失效可能是UA的问题,这里也许能找到答案

Request-rate: 1/1 建议1秒钟爬取一个页面 (那我想你设置延时应该心里有数了)

Crawl-delay: 5 建议爬虫询问的频率是5秒一次

Disallow 是不允许爬取的目录,这里基本上可以告诉我们有哪些子路径

User-agent: *
Request-rate: 1/1
Crawl-delay: 5

Disallow: /timeline
Disallow: /submit-entry
Disallow: /new-entry
Disallow: /edit-entry
Disallow: /notification
Disallow: /subscribe/subscribed
Disallow: /user/settings
Disallow: /reset-password
Disallow: /drafts
Disallow: /editor
Disallow: /user/invitation
Disallow: /user/wallet
Disallow: /entry/*/view$
Disallow: /auth
Disallow: /oauth
Disallow: /zhuanlan/*");
curl

curl是命令行下的文件传输工具,这里拿出来是因为发现了一个好的工具 curl.trillworks.com/#python 可以直接将curl脚本转成python requests库的请求方式。

使用方法:
(1)打开chrome的开发者工具
(2)选择想要访问的链接,然后 copy -> copy as cURL(bash)
(3)粘贴到上面的那个网址中就可以得到简易爬虫脚本

使用 Katalon Recorder

有时候我们会使用Selenium工具模拟浏览器进行数据爬取,但是苦于自己写与浏览器交互的脚本。这里推荐一个工具 Katalon Recorder可以方便的产生交互脚本,在模拟搜索、模拟登陆、滚动、点击的时候都很有效。是一个浏览器插件,chrome和Firefox都有。使用起来也很简单

(1) 先new一个新的录制
(2) 开始录制 record,这时候你可以与网页交互,这个插件会记录你的操作(从加载网页到停止录制)
(3) 停止录制之后,点击export,选择自己喜欢的语言导出就行

下面这一段是我们实际使用的时候需要用到的,这样就不用自己去编写交互脚本了

一种简单的反爬技术

目前很多博客网站的next操作是根据上一次请求的最后一条数据的某个id作为下一次请求的参数,不仔细看还发现不了(也亏返回的json字段命名语义化),典型网站有简书和掘金,文章列表页,请求的时候是根据上一次请求的最后一篇文章的信息作为下一次获取数据的请求参数。

js2py

蛮荒时代遇到js加密的网页爬取是将混淆之后的js加密代码强行还原为py代码,很累~~现在有了js2py这个方便的python库,能够轻松很多,js转py工具

移动端抓取替代网页端

不少网站移动端的接口访问比网页端简单多,反爬也弱一些,比如拉钩网。 这里有一个知识点:不少网站在处理请求的时候会根据UA来判断客户端类型,然后返回PC端页面或者移动端页面(案例:拉钩网) 利用这个,我们可以将chrome的开发者模式调节为手机模式,这样就可以获取到移动端的接口,你会发现页面也简洁了接口也简单了~

注:随着前端技术的发展,适配多端的页面也开始流行,所以前端牛逼

两个思考 为什么爬虫要设置User-Agent

统计访问频率的时候有一部分是依赖于ua

有时候需要根据ua返回不同的代码

对于前端还需要拿去判断使用兼容性代码

host

很多时候会设置HOST这个字段,其实可以这样理解,我们访问的时候使用的是域名,但是http协议访问的时候使用的是ip,存在一台服务器上有多个服务,这样多个域名会解析成一个ip,当服务器接收到这个请求的时候他需要考虑由哪个服务来处理(正常是反向代理判断请求的路径然后正则匹配转发请求),但是我自己假想了一下也可以用host来判断转发(这个启发来源于Access-Control-Allow-Origin只能设置一个值,当需要设置多个值的时候我使用host字段+白名单来动态设置的)


作为笔记记录!感谢您与我一起虚度时光

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7270.html

相关文章

  • [杂谈]了解一些额外知识,让前端开发锦上添花

    摘要:对的请求,也是要有一个了解,比如协议,请求方式,请求过程,结果状态码等。教程协议详解经典面试题一个故事讲完响应状态码上面提到响应状态码,在这里也简单写下。 劝了别人无数次,让别人喝了鸡汤,帮别人填坑,自己却掉了坑 1.前言 在前端学习里面,很多人都是注重学习代码(html,css,js)。或者是一些框架,库(jquery,vue,react),或者是各种工具(webpack,gulp)...

    vvpvvp 评论0 收藏0
  • [杂谈]了解一些额外知识,让前端开发锦上添花

    摘要:对的请求,也是要有一个了解,比如协议,请求方式,请求过程,结果状态码等。教程协议详解经典面试题一个故事讲完响应状态码上面提到响应状态码,在这里也简单写下。 劝了别人无数次,让别人喝了鸡汤,帮别人填坑,自己却掉了坑 1.前言 在前端学习里面,很多人都是注重学习代码(html,css,js)。或者是一些框架,库(jquery,vue,react),或者是各种工具(webpack,gulp)...

    张率功 评论0 收藏0
  • [杂谈]了解一些额外知识,让前端开发锦上添花

    摘要:对的请求,也是要有一个了解,比如协议,请求方式,请求过程,结果状态码等。教程协议详解经典面试题一个故事讲完响应状态码上面提到响应状态码,在这里也简单写下。 劝了别人无数次,让别人喝了鸡汤,帮别人填坑,自己却掉了坑 1.前言 在前端学习里面,很多人都是注重学习代码(html,css,js)。或者是一些框架,库(jquery,vue,react),或者是各种工具(webpack,gulp)...

    zhichangterry 评论0 收藏0
  • 干货 | 学习Python正确姿势

    摘要:勤学学习效率与效果取决于执行力。这一步学习的正确姿势是在实践操作中发掘问题,然后带着问题找答案。拆分任务将目标分解成具体可执行的学习任务。勤学强大的执行力是学习的根本保障。分享复述检验学习成果,提高学习效果的最好方法。 showImg(https://segmentfault.com/img/bVbcPGZ?w=256&h=256); 前段时间和大家一起分享了一篇关于学习方法内容《大牛...

    Thanatos 评论0 收藏0
  • Python

    摘要:最近看前端都展开了几场而我大知乎最热语言还没有相关。有关书籍的介绍,大部分截取自是官方介绍。但从开始,标准库为我们提供了模块,它提供了和两个类,实现了对和的进一步抽象,对编写线程池进程池提供了直接的支持。 《流畅的python》阅读笔记 《流畅的python》是一本适合python进阶的书, 里面介绍的基本都是高级的python用法. 对于初学python的人来说, 基础大概也就够用了...

    dailybird 评论0 收藏0

发表评论

0条评论

elva

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<