用我本身的话来总结就是经过模拟客户端访问服务器获取数据的工具。爬虫的简易模型以下:前端
能够当作检索的清单python
图片是我之前学习爬虫的时候收藏的,具体来源已经记不得了chrome
下面这张是简易版的参考,打钩的是我已经使用过和掌握的数据库
因为网站开发人员使用技术不一样和网站运维人员对访问的限制没有固定的爬虫模板,并且爬虫是须要长期维护的工程,一旦网页中的一个class属性发生改变或者api接口参数变化都须要修改爬虫。可是一些技巧是能够借鉴的。json
robots.txt是与搜索引擎约定的君子协议,他可以可咱们提供一些网站的信息。 下面是掘金的robots.txt
,咱们能够收获如下信息api
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/*?sort=newest
Disallow: /zhuanlan/*?sort=comment
Disallow: /search
Disallow: /equation
复制代码
curl是命令行下的文件传输工具,这里拿出来是由于发现了一个好的工具 curl.trillworks.com/#python 能够直接将curl
脚本转成python requests库的请求方式。浏览器
使用方法:
(1)打开chrome的开发者工具
(2)选择想要访问的连接,而后 copy -> copy as cURL(bash)
(3)粘贴到上面的那个网址中就能够获得简易爬虫脚本
复制代码
有时候咱们会使用Selenium工具模拟浏览器进行数据爬取,可是苦于本身写与浏览器交互的脚本。这里推荐一个工具 Katalon Recorder
能够方便的产生交互脚本,在模拟搜索、模拟登录、滚动、点击的时候都颇有效。是一个浏览器插件,chrome和Firefox都有。使用起来也很简单bash
(1) 先new一个新的录制
(2) 开始录制 record,这时候你能够与网页交互,这个插件会记录你的操做(从加载网页到中止录制)
(3) 中止录制以后,点击export,选择本身喜欢的语言导出就行
复制代码
下面这一段是咱们实际使用的时候须要用到的,这样就不用本身去编写交互脚本了服务器
目前不少博客网站的next
操做是根据上一次请求的最后一条数据的某个id做为下一次请求的参数,不仔细看还发现不了(也亏返回的json字段命名语义化),典型网站有简书和掘金,文章列表页,请求的时候是根据上一次请求的最后一篇文章的信息做为下一次获取数据的请求参数。运维
蛮荒时代遇到js加密的网页爬取是将混淆以后的js加密代码强行还原为py代码,很累~~如今有了js2py
这个方便的python库,可以轻松不少,js转py工具
很多网站移动端的接口访问比网页端简单多,反爬也弱一些,好比拉钩网。 这里有一个知识点:很多网站在处理请求的时候会根据UA来判断客户端类型,而后返回PC端页面或者移动端页面(案例:拉钩网) 利用这个,咱们能够将chrome的开发者模式调节为手机模式,这样就能够获取到移动端的接口,你会发现页面也简洁了接口也简单了~
注:随着前端技术的发展,适配多端的页面也开始流行,因此前端牛逼
不少时候会设置HOST
这个字段,其实能够这样理解,咱们访问的时候使用的是域名,可是http协议访问的时候使用的是ip,存在一台服务器上有多个服务,这样多个域名会解析成一个ip,当服务器接收到这个请求的时候他须要考虑由哪一个服务来处理(正常是反向代理判断请求的路径而后正则匹配转发请求),可是我本身假想了一下也能够用host
来判断转发(这个启发来源于Access-Control-Allow-Origin
只能设置一个值,当须要设置多个值的时候我使用host字段+白名单来动态设置的)
做为笔记记录!感谢您与我一块儿虚度时光