摘要:蛮荒时代遇到加密的网页爬取是将混淆之后的加密代码强行还原为代码,很累现在有了这个方便的库,能够轻松很多,转工具移动端抓取替代网页端不少网站移动端的接口访问比网页端简单多,反爬也弱一些,比如拉钩网。
什么是爬虫用我自己的话来总结就是通过模拟客户端访问服务器获取数据的工具。爬虫的简易模型如下:
网站服务器是我们要访问的目标,主要用来制定访问规则(也就是我们应该如何模拟可以访问该服务器的用户以及如何访问网站上的数据)
爬虫通过http或者https协议与网站服务器交互
我们做的主要工作是在定制爬虫脚本,尽可能的模仿客户端的访问
本地存储的选择很多,可以是文件的形式,也可以存储到数据库中
爬虫可能会涉及的技术罗列可以当做检索的清单
图片是我以前学习爬虫的时候收藏的,具体来源已经记不得了
下面这张是简易版的参考,打钩的是我已经使用过和掌握的
爬虫技巧分享
由于网站开发人员使用技术不同和网站运维人员对访问的限制没有固定的爬虫模板,而且爬虫是需要长期维护的工程,一旦网页中的一个class属性发生改变或者api接口参数变化都需要修改爬虫。但是一些技巧是可以借鉴的。
robots.txtrobots.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)...
摘要:对的请求,也是要有一个了解,比如协议,请求方式,请求过程,结果状态码等。教程协议详解经典面试题一个故事讲完响应状态码上面提到响应状态码,在这里也简单写下。 劝了别人无数次,让别人喝了鸡汤,帮别人填坑,自己却掉了坑 1.前言 在前端学习里面,很多人都是注重学习代码(html,css,js)。或者是一些框架,库(jquery,vue,react),或者是各种工具(webpack,gulp)...
摘要:对的请求,也是要有一个了解,比如协议,请求方式,请求过程,结果状态码等。教程协议详解经典面试题一个故事讲完响应状态码上面提到响应状态码,在这里也简单写下。 劝了别人无数次,让别人喝了鸡汤,帮别人填坑,自己却掉了坑 1.前言 在前端学习里面,很多人都是注重学习代码(html,css,js)。或者是一些框架,库(jquery,vue,react),或者是各种工具(webpack,gulp)...
摘要:勤学学习效率与效果取决于执行力。这一步学习的正确姿势是在实践操作中发掘问题,然后带着问题找答案。拆分任务将目标分解成具体可执行的学习任务。勤学强大的执行力是学习的根本保障。分享复述检验学习成果,提高学习效果的最好方法。 showImg(https://segmentfault.com/img/bVbcPGZ?w=256&h=256); 前段时间和大家一起分享了一篇关于学习方法内容《大牛...
阅读 2269·2021-11-17 09:33
阅读 825·2021-10-13 09:40
阅读 547·2019-08-30 15:54
阅读 757·2019-08-29 15:38
阅读 2396·2019-08-28 18:15
阅读 2461·2019-08-26 13:38
阅读 1815·2019-08-26 13:36
阅读 2109·2019-08-26 11:36