python程序设计心得体会感想-Python 爬虫开发的心得体会

前一段时间由于想从网络上搜集一些数据来练习一下数据分析的技术,所以心中萌生了对爬虫的研究念头。本人的工作就是和Python编程有很大的关系,于是就开始了爬虫的研究之路。入门书籍就是范传辉老师的《Python爬虫开发与项目实战》,不得不说这本书我个人认为还是写的非常好的。从头到尾由浅入深的说明了爬虫技术的发展过程,而且能结合实际的用例更细致化的说明和理解爬虫的运行过程,这本书还是很适合想要了解并上手写爬虫的小白们,当然最好还是有一定的Python编程基础。

写这篇文章主要的目的还是对自己学习爬虫的一个总结,学习的过程其实就是理论->实践->总结->再学习的过程,废话少说直奔主题。

无论是简单的爬虫还是大型的爬虫无外乎核心的部分就是五部分,URL管理器、页面下载器、页面解析器、爬虫调度器和存储器。

URL管理器:记录已爬取的链接和未爬取的链接以及链接的去重

页面下载器:负责下载爬虫请求的页面

页面解析器:解析并提取爬虫所需的数据

调度器:负责协调爬虫的运行

存储器:负责持久化爬取的数据

初学者还是应该亲自动手写一写简单的爬虫框架,这样会对爬虫有更好的理解。我个人认为在这五部分里面页面解析环节相对麻烦一点。因为页面的提取主要还是用到了正则表达式和xpath,对于页面的定位有时还是很头疼的。在爬虫的进阶环节我们就可以了解和运用scrapy框架了,scrapy为我们解决了大部分的麻烦,我们所做的就是重写页面解析的部分,就连翻页这样的问题都可以交给Rule和LinkExtractor来搞定。页面解析中的定位问题可以借助scrapy的selector搞定,selector提供了xpath等页面提取的方法。scrapy中你可以定义自己的Item把提取的元素持久化到数据库中,可以是关系数据库MySQL等,我用的是MongoDB,它的方便之处就是不用我创建表因为它是非关系型数据库可以直接将数据映射成相应的表,还是很方便的,存储的类型是BSON。

好了,我们一旦写好了一个爬虫就准备爬取相应的网站了。刚一运行发现网站给你拒绝了,一查原因是因为遵守了爬虫的规则导致的,于是在scrapy的setting文件中把ROBOTSTXT_OBEY设置为False。爬行了一段时间后突然你发现被服务器redirect了,状态码302,这时应该意识到可能是被反爬虫识别了,简单说人家服务器认为你不是“人”,你的行为是机器了所以人家把你搞了。这种时候多见的是redirect到验证码的网页,说起验证码却是一个很头疼的事儿,简单的验证码可以通过pytesser、tesseractOCR和PIL搞定,但是带干扰的验证码就没那么简单了。普通的captcha识别模块准确率很低基本没用,复杂一点的我在网上见到有用机器学习的方法来搞定,简单说就是通过大量的验证码样本数据建立数学模型,通过不断的学习来预测验证码的值,这种方法的正确率还是很高的,但是研究起来比较复杂。没招了,我人工打码吧,可以通过selenium跳转至验证码页面手工输入验证码pass,这种方法虽然可解燃眉之急但是爬取的数据量大了的话也白扯,你总不能一直在那打码吧。像12306网站这么变态的验证码,让你怀疑人生。

爬不动了,怎么办啊?道路只有一条就是慢下来,像个“人”一样提取人家的数据,爬虫是某种程度上对人家的网站负载的一种东西,增加了目标网站的负荷,先不说人家数据的隐私性,你对人家的服务器性能造成了一定的影响人家当然要反爬你了。好在scrapy提供了自动降速auto

throttle,尽量把速度降下来把download页面的速度也降下来,尽量“优雅”的获取他人的数据。如果数据量大的话还可以采取分布式的方式,多机部署多线程运行,scrapy可以结合redis实现分布式。

突破反爬的途径无外乎大致几种:User-Agent伪装、IP代理池、降速和Google cache等。

由于现在各大网站反爬的技术还是比较厉害的所以基本除了降速都不太乐观,就连降速人家都有招对付你,真是道高一尺魔高一丈啊。但是无论如何也阻止不了我们爬虫大队的脚步的,因为我们是害虫!

你可能感兴趣的:(python程序设计心得体会感想-Python 爬虫开发的心得体会)