为什么写爬虫,我们要选择Python

记得有次发现有些网页抓不下来,开始好久都找不着头脑,废了九牛二虎之力,终于发现是http请求处理的问题。深入代码才看到,http协议的这部分代码都是写这个人自己实现的,只是实现了最基本的协议,也就是,建立socket连接,发送请求,然后通过socket接收数据,解析响应头(response headers)。然而这个响应头连http重定向都没有处理,凡是重定向的响应就都失败了,自然那些网页就抓不下来了。

为了抓到那些响应,我们就不得不继续完善http协议的解析功能,贡献了很多代码。。

为什么要自己实现基本的http协议呢?难道就没有好的第三方库可以用吗?现在想来,那个爬虫也就是看上去能用,听上去高大上,实际上问题很多。

那个网络爬虫程序维护了一两年最终放弃了,后来的爬虫技术都开始用Python来实现了。

现在如果让我实现一个网络爬虫,二话不说,肯定是要用Python。究其原因,可能有已经几点经验和教训跟大家分享一下。

1. 变幻莫测的网络爬虫

写过爬虫,可能都有这么一个感觉,就是昨天跑的好好的爬虫,今天可能就出问题,不work了。这里面的原因可能就是,网页的改版,网站的封锁等等。遇到这种情况,我们就必须在最快的时间内调试找出问题所在,并以最快的速度修复,使其尽快上线跑起来。

2. 随机应变的Python

鉴于上述爬虫复杂的变化,写网络爬虫就必须依赖一个快速开发、灵活的语言,同时又有完整丰富的库支撑。而同时具备这些优点的语言,无疑就是Python了。所以,Python天然就是为爬虫而生,爬虫天然就是择Python而用。

3. 简洁丰富的Python

看到Python和网络爬虫这种天然相连的关系,小猿们不禁要问,Python适合网络爬虫的天然属性都是哪些呢?不急,听老夫慢慢道来。

3.1 简洁的语法

Python的语法非常简单,提倡简洁而不简单,Python开发者的哲学就是“用一种方法,最好是只有一种方法来做一件事”,这种哲学让你写的代码没有太多个人风格,易于让他人看懂你的代码,也让你轻易看懂别人的代码。Python的简洁,也让开发者可以仅用几行代码就实现一个功能,而同样的功能用Java可能要几十行上百行,要用C++可能是几百行。
大家可以试试在Python解释器里面运行import this,来品味一下Python的哲学:


>>> import this
> The Zen of Python
> by Tim Peters

> Beautiful is better than ugly.
> Explicit is better than implicit.
> Simple is better than complex.
> Complex is better than complicated.
> Flat is better than nested.
> Sparse is better than dense.
> Readability counts.
> Special cases aren‘t special enough to break the rules.
> Although practicality beats purity.
> Errors should never pass silently.
> Unless explicitly silenced.
> In the face of ambiguity, refuse the temptation to guess.
> There should be one-- and preferably only one --obvious way to do it.
> Although that way may not be obvious at first unless you‘re Dutch.
> Now is better than never.
> Although never is often better than *right* now.
> If the implementation is hard to explain, it‘s a bad idea.
> If the implementation is easy to explain, it may be a good idea.
> Namespaces are one honking great idea -- let‘s do more of those!

Python简洁的语法,让你实现、修改爬虫都变得轻松起来。也就是说,写起来贼快!人生苦短,何不Python

原文地址:https://blog.51cto.com/14318113/2390631

时间: 2024-11-06 09:33:54

为什么写爬虫,我们要选择Python的相关文章

python爬虫技术的选择

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica } span.s1 { } 本篇文章不是入门帖,需要对python和爬虫领域有所了解. 爬虫又是另外一个领域,涉及的知识点比较多,不仅要熟悉web开发,有时候还涉及机器学习等知识,不过在python里一切变的简单,有许多第三方库来帮助我们实现.使用python编写爬虫首先要选择合适的抓取模块,最简单的功能就是能发送和处理请求, 下面就介绍几个常用的抓取的方式. 一.pyt

为什么python适合写爬虫?(python到底有啥好的?!)

我用c#,java都写过爬虫.区别不大,原理就是利用好正则表达式.只不过是平台问题.后来了解到很多爬虫都是用python写的.因为目前对python并不熟,所以也不知道这是为什么.百度了下结果: 1)抓取网页本身的接口相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API.(当然ruby也是很好的选择)此外,抓取网页有时候需要模拟浏览器的行为,很多网站

Python写爬虫-爬甘农大学校新闻

Python写网络爬虫(一) 关于Python: 学过C. 学过C++. 最后还是学Java来吃饭. 一直在Java的小世界里混迹. 有句话说: "Life is short, you need Python!"  翻译过来就是: 人生苦短, 我用Python 究竟它有多么强大,  多么简洁? 抱着这个好奇心, 趁不忙的几天. 还是忍不住的小学了一下.(- - 其实学了还不到两天) 随便用一个"HelloWorld"的例子 //Java class Main{ pu

[Python]新手写爬虫全过程

今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在txt文本里吧.其实主要的不是学习爬虫,而是依照这个需求锻炼下自己的编程能力,最重要的是要有一个清晰的思路(我在以这个目标努力着).ok,主旨已经订好了,开始‘撸串’了. 目标网站:http://bohaishibei.com/post/category/main/(一个很有趣的网站,一段话配一个图,老

python写爬虫使用urllib2方法

python写爬虫使用urllib2方法 整理了一部分urllib2的使用细节. 1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理. 新建test14来实现一个简单的代理Demo: import urllib2 enable_proxy = True proxy_handler = urllib2.ProxyHandler({"http" : 'htt

[Python]新手写爬虫全过程(转)

今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在txt文本里吧.其实主要的不是学习爬虫,而是依照这个需求锻炼下自己的编程能力,最重要的是要有一个清晰的思路(我在以这个目标努力着).ok,主旨已经订好了,开始‘撸串’了. 目标网站:http://bohaishibei.com/post/category/main/(一个很有趣的网站,一段话配一个图,老

python写爬虫时的编码问题解决方案

在使用Python写爬虫的时候,常常会遇到各种令人抓狂的编码错误问题.下面给出一些简单的解决编码错误问题的思路,希望对大家有所帮助. 首先,打开你要爬取的网站,右击查看源码,查看它指定的编码是什么,如: <META http-equiv=Content-Type content="text/html; charset=gb2312"> 我这里指定的charset为gb2312,下面我都会用gb2312作为例子进行编码解码 提交输入 我们常常要获取输入,通过参数的形式提交请求

Python从零开始写爬虫-2 使用正则表达式解析HTML

上一篇博客Python从零开始写爬虫-1 使用Python发送http请求并获得网页源代码中我们已经学习到如何从网站上获取html的源码, 那么今天我们就来学习如何使用正则表达式来解析HTML.同样以Python的Api文档为例. 正则表达式: 又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本.(从百度上复制过来的) 看这篇文章没有正则表达式的基础也可

Python从零开始写爬虫-3 获取需要抓取的URLs

Python从零开始写爬虫-3 获取需要抓取的URLs ??在一节中,我们学习了如果通过正则表达式来获取HTML里面指点便签的内容, 那么我今天就来看看实际的效果.在抓取小说之前, 我们需要知道小说有哪些章节,以及这些章节的顺序. ??刚开始我是通过获取一个章节, 然后从这个章节获取下个章节的链接, 然后发现这个方法问题很大. 该方法只能单线程操作, 对于抓取小说来非常的满, 几乎没有爬虫是单线程, 单线程的效率是无法被接受的. 鲁棒性差, 只要有一个章节没有正确的抓取下来, 那么整个程序就无法