我想很多人入门python就是小黄图爬虫,这是最低级的,就是HTTP请求,保存一下图片,用python实现非常快,网上一看,很多爬虫的教程就讲到这里,所以python资源多,实际上其实很单一,看了跟没看没什么区别,都是找一下网页的规律,然后BeautifulSoup解析一下网页,再使用request做HTTP请求,都这样,可能有些还用了多线程多进程,可是都没有考虑到反爬问题,很多有价值的数据都会有反爬,那么很多Python爬虫资料都没卵用

这里分享一下我听闻过的反爬和反反爬,当然我也在学习,不足之处欢迎拍砖

1.

反爬:判断是否为浏览器(最初级反爬)

反反爬:伪造请求头headers,其实就是为User-Agent赋值

2.

反爬:弹出验证码

反反爬:a. 手动输入验证码,就是将验证码图片下载到本地,然后通过PIL库显示一下,当爬虫遇到验证码时会显示出来,我们手动填一下

b.使用打码平台,将验证码对接到相应的打码平台,平台会帮我们输入正确的验证码,平台怎么输入正确验证码的呢?它其实就是租人来填,填多少个有相应的金额可以获取

c.使用Python的图像识别库,如PIL,对验证码图片进行处理,让词表库匹配一下,最后自动填写

我有一个想法就是通过CNN卷积神经网络对验证码中的图片,将验证码图片分割成一个个的字符,获得足够多的字符就可以喂养给CNN,当做训练数据,CNN对图像识别的准确率还是很高的,有兴趣的人可以看看CNN识别手写字体MNIST数据集,目前我还没有这样弄过

当然还有一些很变态的验证码,比如Google的验证码,要你找出图片中的店铺之类的,这个没想法,欢迎大神提点,对于滑动验证码已经有人做了比较成功的尝试

3.

反爬:需要登录才能获得想要的数据

要弄通这一个的反反爬我觉得有必要弄明白登录的一些知识,如cookies、session、token

现在常见的就是session和token,因为将用户敏感信息存到cookies中非常不安全

session其实非常简单,就是用户信息存到服务器中,将对应这个用户信息的唯一id发放给用户,一般存到cookies,理解了这种登录模式,使用反反爬就明确了,将自己正确登录后的cookies保存下来,放到爬虫的cookies中,每次请求都带上,那么服务器就会认为你是登录的用户

token其实也不难理解,很多网站在用户登录成功后,会使用唯一的token来标识不同的用户,那么每次请求头中包含这个token就OK了,这里要注意一下token的格式

4.

反爬:JavaScript逻辑复杂化界面

很多时候界面的数据不是静态的,而是动态的,如通过ajax获得的数据,如果没有使用JavaScript来操作这些数据,那么我们自己访问这个ajax接口就可以获得数据了,那么有些网站,返回的数据非常奇怪,只有通过网站的JavaScript处理后,才是人看的数据,这就非常尴尬了,那么一般有两种方式

反反爬:a. Python模仿JavaScript中的逻辑,因为都可以获得原始的数据,只是人家的数据通过JavaScript处理后才是正常的,那么我们可以使用python实现JavaScript中的逻辑,就可以获得数据了,当然这对JavaScript功底有一定的要求

b. PhantomJS+Selenium,这个其实就没什么好说的了,就会利用自动测试,使用浏览器来获得数据,获得的这些数据都是经过对方JavaScript处理过的可用数据,就是有点慢,不适合分布式爬虫,当然有人说PhantomJS是可以被识别出来的(携程的某次分享)

5.

反爬:基于用户行为

因为爬虫的数据非常快,那么一个用户不可能在一秒都没有就看完这个页面,所以认为你是爬虫,很多网站会对访问频率有个限制,如果你访问的太快,就会被认为不是一个人,那么测试出这个边界就比较重要了,有了边界,就可以最大效率的爬取网站

反反爬:a.模拟用户行为,用户平时怎么浏览,你就怎么做,比如访问速度慢点,或者没爬完一个界面,等个1分钟,这种方式的效率非常慢

b.多IP多账号,一种暴力却很有效的方式,通过多个IP来访问一个网站,这个IP挂了,立刻有另一个IP顶上,那么很多初学者会使用一些免费代理IP,其实免费最贵,我当时也就是这样过来的,免费代理IP巨慢而且不稳定,使用付费代理IP,虽然付费,其实非常便宜,几千个IP随便用,为了避免广告嫌疑,大家就自己去搜付费的IP吧,而多账号其实也是一样的理念,挂了就换

你以为看了网上python的爬虫资料,就能弄懂爬虫了吗?

差的远呢。。

比如分布式,实现的核心,其实就是一个消息队列,和实现去重队列,用的还多是第三方的消息系统(redis,Kafka等),所以你还得学一些消息队列。

再说反爬,反爬简单的就是构造个合法的请求包,换换IP,复杂的就要逆向模拟js,这也和语言没什么太大的关系,要学的是网络协议和JavaScript。

然后什么验证码的识别,这个要学图像识别甚至要弄个AI来学习人的鼠标轨迹。

或者要抓app的数据包来爬虫,这回头还是得学java,分析app源码找破解方法。

这一行,因为涉及的内容太广了,所以网上确实没有什么特别系统的资料,只能你摸到一个坑,填一个坑。。。

在过往的经历中,有过几年爬虫项目经历,回过头来看,写爬虫最重要的是心态,能够接受不断受挫,然后爬起来重新开始,当然技术功底和经验的积累也很重要;其实不需要太纠结是哪种语言的学习资源,最重要的是要先想清楚我们要解决的是什么样的问题,也就是业务场景,然后是解决问题思路和方法,这些无论使用的是什么语言都是相通的;举几个常见的场景:

0、搜索引擎;

1、在公开网络上获取数据做分析,产出报告;

2、比价类网站,做推荐;

3、近两年很火的用户画像、信用评估等;

4、……

搜索引擎比较特殊,在爬取数据时需要考虑深度优先or广度优先的算法,同时,也可以通过提高排名的诱惑,来影响目标网站做适当的调整,满足你的要求,如果有SEM推广经验的同学应该会非常熟悉;

第一种场景,其实对爬虫工程师的专业技能要求并不是很高,很多数据分析的同事就可以搞定,遇到的问题多数可以通过IP代理解决,当然如果有需要登录的流程,会比较麻烦;

第二种场景,是相对垂直的领域,目标网站很多时候是电商,且电商类的网站多数会有反爬策略,有些电商会将商品价格图片化处理,增加爬虫获取数据的难度,但纯数字类的图片OCR倒也不是太困难;能搞定这类场景的爬虫工程师找工作应该不是难事;

第三种场景,在近两年人人都说大数据,每家公司都有AI的进程中发展的如火如荼,从产品设计到营销获客,再到互联网金融领域实时授信,都会有非常多的应用场景,也有非常大的招聘需求,当然在开发这类爬虫的过程中遇到的挑战也比较多;如:

1、涉及的数据维度多且实时性要求高

做信用评估,用户的收入、支出、消费习惯、保险等等,一切能描述用户金融属性的数据;这里所涵盖的网站轻轻松松超过了100个,且大多数情况下你需要实时获取到这些数据;就Java来说,涵盖的基础知识有:多线程、Socket、HttpClient、HttpUnit等等;还要搞清楚Http和Https协议;

2、网站的反爬措施

封IP,最简单粗暴的方式,但很多网站不会完全封死,这样有可能会误杀正常的用户,会封你几个小时,然后恢复,IP代理池可以解决大部分的问题,代理资源的更新策略是一个可以好好研究的地方;也有很多可以细扣的点,代理资源不够用了怎么办,能不能想办法利用上用户的手机端,这个时候你会发现,上学的时候学的很多网络原理能帮上忙,它能帮你打开很多思路;如果要利用用户的手机端,要采用哪种连接建立的方式,虚电路?分组报文?采用什么样的架构设计?在你一筹莫展的时候看看netty?很多时候一位优秀的程序员在细节的处理方式上会让人拍手叫绝,优雅高效的解决问题;

JS加密、混淆,最考验js能力的时候到了;如果我们还处于使用js做表单校验的水平,那是时候看看那本经典的大犀牛了,大型网站一般会有专业的前端工程师,写的一手骚气的js,面向对象、自己封装的组件,新潮的框架,你会时不时的怀疑自己的能力;更变态的是禁止调试,遇到过的盆友应该满眼都是泪;

人机识别,验证码,拖拽、点选,花样百出,还有用户行为,如果你的访问路径不符合用户的行为,那么大概率你会被人机识别系统捕获到,下场轻一点的可能是IP被封,账号被封等等,最头疼的是给你返回乱序的数据,你还没办法通过监控手段监测到,等业务端发现,用户可能已经流失了。

当然还会有很多Token校验,请求头校验、请求参数校验、心跳请求校验等等;之前看反爬的文章,有同学提出用少数民族的文字来做加密,这要上线了,估计很多爬虫要凉凉;

3、数据结构化/清洗的难度

别的先不说,如果在我们的场景中要做账单的解析,近千余种的账单一定会让我们头疼,同一家发卡行会发行多种类别的卡,每种卡的账单样式都不太一样,就是相同样式的账单它的实现方式也会不一样,很多时候一张账单的DOM元素嵌套100多层是非常常见的情况,从DOM元素的结构来看,这些账单大都是通过DW类似的工具画出来的,也就是说并不一定会有规律可循,这么多账单怎么解析,如果公司钱多,人海战术那没问题,如果你是小团队开发,一共就3~4个人怎么办?

==============先写到这,剩下的有时间再写吧(习惯性烂尾)=============

4、海量数据对存储的挑战

5、请求量大了以后怎么做架构和性能的优化

当我们把一个爬虫项目写好,维护好,我们会发现用到的都是基础知识;就像武林高手强在内功和心法;

爬虫专用代理IP点我注册免费领取一万IP测试

python爬虫和Java爬虫哪个更好相关推荐

  1. python爬虫与java爬虫的区别_java爬虫(一)主流爬虫框架的基本介绍

    (1).Scrapy: Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测 ...

  2. java爬虫框架(java爬虫框架webmagic)

    Java页面框架有哪些呢? 主要应用技术:EJB等出处:java.sun.com/blueprints/code/index.简述:这是SUN在展示J2EE平台时所用的例子PetStore(宠物商店系 ...

  3. 什么是爬虫,常见的java爬虫框架有哪些?-蛙课网

    随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,与此同时,java语言是使用范围最广的编程语言.今天我们一起了解一下什么是爬虫,java爬虫框架有哪些. 网络爬虫(又称为网页蜘蛛,网络机器人 ...

  4. java爬虫系列(五)——今日头条文章爬虫实战

    文章目录 项目源码 爬虫目标 爬虫设计思路 爬取方式 动态解析网页方式爬取 解析接口方式爬取 解析思路 破解入口 接口对比 破解加密参数 参数生成方式 解析js 分析接口返回值 解析原文地址 java ...

  5. java爬虫系列(三)——漫画网站爬取实战

    项目地址 数据库设计 ORM框架 代理浏览器 实战目标 代码解读 com.ouyang.crawlers.Manhua start() chapterBean() contentBean() 实测 启 ...

  6. java爬虫系列(二)——爬取动态网页

    准备工作 项目地址 网页解析工具地址 启动网页解析器 根据系统选择所需文件 指定端口号启动工具 项目配置 seimi.properties SeimiAgentDemo.java 分析原网页代码 Bo ...

  7. java爬虫系列(四)——动态网页爬虫升级版

    项目地址 项目介绍 框架 结构 快速启动 修改配置文件 WebDriverPool.java App.java ComicDriver.java ComicContentService.java co ...

  8. 爬虫与反爬虫技术分析

    科普: 什么是爬虫: 百度百科:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还 ...

  9. python网络爬虫、Java 网络爬虫,哪个更好?

    说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...

  10. java 爬虫框架_不知道Python爬虫?这篇文章丢给他(内含框架结构)

    前言 爬虫即网络爬虫,英文是Web Spider.翻译过来就是网络上爬行的蜘蛛,如果把互联网看作一张大网,那么爬虫就是在大网上爬来爬去的蜘蛛,碰到想要的食物,就把他抓取出来. 我们在浏览器中输入一个网 ...

最新文章

  1. js margin作用到父元素_CSS中margin-top对父级元素产生作用的问题
  2. C# 判断两张图片是否一致,极快速
  3. 实现数据排序的几种方法
  4. JForum二次开发(一)
  5. java 类说明,java基础类型说明
  6. highCharts使用中问题总结
  7. JqueryCookie
  8. IDEA查看Maven路径
  9. F5和nginx配合转发前端请求
  10. CountDownLatch和CyclicBarrier 举例详解
  11. paip.汉字简化大法总结
  12. Cadence导入AD的pcb文件中元件的封装
  13. 九大背包问题专题--完全背包问题(详解,最优解)
  14. 一个女人努力工作的意义
  15. 特征选择(模型输入参数的分析选择)方法汇总
  16. 【无标题】微信小程序:强制更新(测试编译)
  17. 分布式任务调度平台XXL-JOB测试报告
  18. Power Query简介(超级查询:获取与整理数据)
  19. 按键精灵curl、FTP、zip、sha1算法、下载文件、上传文件、蓝奏云api、压缩解压文件支持 安卓、IOS
  20. java课程设计心得体会绪论

热门文章

  1. 花钱购买C语言教程,秘籍:小白从零开始玩转C语言教程,足足300集
  2. 全国计算机等级考试准考证下载 怎么弄
  3. App 抓包-Fiddler简单使用教程
  4. vue + echarts 实现简单中国地图
  5. 中关村GHOSTXPSP3装机自选纯净版V2010.4
  6. SANXIN-B01开发板verilog教程V3电子版
  7. 老人机java游戏模拟器_Java模拟器
  8. 数据结构(java语言描述)课后答案_数据结构JAVA语言描述习题答案(刘小晶等主编)pdf总复习.ppt...
  9. cad插件_CAD插件乱刀去教育戳记安装教程
  10. 超好用的代码格式化工具Astyle使用