您的位置:首页 > 编程语言 > Python开发

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

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

 网页都有自己的URL(统一资源定位符)来进行定位
网页都使用HTML来描述页面信息
网页都使用HTTP/https协议来传输HTML数据
爬虫的设计思路:
首先确定需要爬取的网页URL地址
通过HTTP/HTTPS协议来获取对应的html页面
提取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,毕竟有数据价值是不是值得费劲反爬虫,还有机器和人力成本。
但爬虫和反爬虫之间的斗争,最后一定是爬虫获胜!因只要是真实用户可以浏览的网页数据,爬虫就一定能爬下来!

 注:上面是我在网上学到的,所以也算是搬运工,有不对的地方欢迎指正!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  爬虫