关于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,毕竟有数据价值是不是值得费劲反爬虫,还有机器和人力成本。
但爬虫和反爬虫之间的斗争,最后一定是爬虫获胜!因只要是真实用户可以浏览的网页数据,爬虫就一定能爬下来!
注:上面是我在网上学到的,所以也算是搬运工,有不对的地方欢迎指正!!!
网页三大特征:
网页都有自己的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,毕竟有数据价值是不是值得费劲反爬虫,还有机器和人力成本。
但爬虫和反爬虫之间的斗争,最后一定是爬虫获胜!因只要是真实用户可以浏览的网页数据,爬虫就一定能爬下来!
注:上面是我在网上学到的,所以也算是搬运工,有不对的地方欢迎指正!!!
相关文章推荐
- 关于Python爬虫自己学习进步2(通用爬虫,聚焦爬虫)
- 关于Python爬虫自己学习进步中的小插曲。。。编码问题
- 关于Python爬虫学习进步(xpath处理的小插曲--xpath如同“失灵”)
- python爬虫学习(8) —— 关于4399的一个小Demo
- 学习python 中的scrapy爬虫框架艰辛路,不推荐看,主要纪录自己学习笔记的
- python爬虫学习(1)--关于正则表达式输入和提取中文
- 记录自己python爬虫的学习
- 关于学习新技术的方法和让自己不断进步的一点建议
- Python的学习笔记DAY7---关于爬虫(2)之Scrapy初探
- Python 爬虫学习 糗事百科 纯属敦促自己学习
- 关于Python学习1--爬虫基础
- 萌新的Python学习日记 - 爬虫无影 - 使用BeautifulSoup + css selector 抓取自己想要网页内容
- 关于Python爬虫,这里有一条高效的学习路径
- python爬虫学习第二十天
- python爬虫学习第二十五天
- 关于指针详解!转自CSDN论坛,自己学习的同时和大家分享下!
- Python爬虫学习1
- Python爬虫学习系列教程
- python 爬虫学习二(Scrapy讲解)
- python爬虫学习二: urllib2模块的学习