关于Python爬虫自己学习进步1

自述:我是一个初学者,对编程很感兴趣,写博客也是为了监督自己,在空闲时候想学习一些东西,下面的东西有我听网课得到到的,仅仅代表一种观点,所以若有不对的地方欢迎批评指正(其中的内容我也担心误导其他一心学习的人)。闲话少叙,正文开始。

网页三大特征:

  1.  网页都有自己的URL(统一资源定位符)来进行定位
  2. 网页都使用HTML来描述页面信息
  3. 网页都使用HTTP/https协议来传输HTML数据
爬虫的设计思路:

  1. 首先确定需要爬取的网页URL地址
  2. 通过HTTP/HTTPS协议来获取对应的html页面
  3. 提取HTML页面里有用的数据
     a.如果是需要的数据,就保存起来 b.如果是页面里的其他URL,那就继续执行第二步

为什么选择Python做爬虫?

有一些语言可供选择,如PHP,java,c/c++,python等等...

PHP:本身天生不是干这个的,而且对多线程,异步支持不够好,爬虫是工具性程序,对速度和效率要求比较高。

Java:网络爬虫生态圈很完善,是python爬虫最大的对手,但是Java语言本身很笨重,代码量很大。爬虫经常需要修改部分采集代码。

C/C++:运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢。

Python:语法优美,代码简介,开发效率高,支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富,还有强大的爬  虫Scrapy,以及成熟高效的scrapy redis分布式策略。而且,调用其他接口也比较方便(胶水语言)


如何抓取HTML页面:

 HTTP请求的处理:urllib、urllib2、requests

 处理后的请求可以模拟浏览器发送请求,获取服务器响应的文件

解析响应内容(因服务器返回的不一定是HTML也可能是json或图片等) 

 解析库:re、xpath(专门解析xml和html,效率很高,底层用C写的)、beautifulSoup(bs4)、jsonpath、pyquery等

  使用某种描述性语言来给我们需要提取的数据定义一个匹配规则,符合这个规则的数据就会被匹配。


如何采集动态HTML、验证码的处理

 通用的动态页面采集:Selenium(自动化测试工具) phantomJS(无界面:模拟真实浏览器加载js、ajax等非静态页面数据)

 Tesseract:机器学习库,机器图像识别系统,可以处理简单的验证码,复杂的验证码可以通过手动输入或专门的打码平台。


Scrapy框架:(最火的两个:Scrapy, Pyspider)

  高定制性高性能(用到异步网络框架twisted),所以数据下载速度非常快,提供数据存储、数据下载、提取规则等组件。


 分布式策略 scrapy redis(这个不是必须项,并不是每个公司都要采集大量的数据):

 scrapy- redis ,在Scrapy的基础上添加了一套以redis数据库为核心的一套组件,让Scrapy框架支持分布式的功能。

主要在Redis里做请求指纹去重(通过集合(set)来做,当采用分布式时有多个线程在爬取页面,要想使得他们不会爬取同一页面,则需要去重),然后再请求分配、最后在数据临时存储。

爬虫 反爬虫 反反爬虫之间的斗争:其实爬虫做到最后,最头疼的不是复杂的页面,也不是晦涩的数据,而是网站另一边的反爬虫人员。对方可能要采取IP地址是不是访问频繁,或者采用验证码,或者动态数据加载,或者加密数据。

注意:反爬虫一般做到封IP,毕竟有数据价值是不是值得费劲反爬虫,还有机器和人力成本。

但爬虫和反爬虫之间的斗争,最后一定是爬虫获胜!因只要是真实用户可以浏览的网页数据,爬虫就一定能爬下来!


 注:上面是我在网上学到的,所以也算是搬运工,有不对的地方欢迎指正!!!


你可能感兴趣的:(关于Python爬虫自己学习进步1)