您的位置:首页 > 其它

爬虫

2016-06-27 16:24 330 查看
        对于网络爬虫,有好几种语言可以选择,但是python是比较好的一种选择。

        在python的初级爬虫中,往往是从urllib开始的,而对于python2,python3两个版本,urllib有两种版本需要注意一下,1、在python2中,往往分为urllib,urllib2两种,可以进行下载并进行试用,需要注意的是这里的使用方法和python3的使用方式是不一样的。2、在python3中将python2中的urllib,urllib2分模块成了urllib.request,urllib.error等模块了,使用方式上也和python2的差很多。在python2中urllib使用urllib2.urlopen()方法,而python3中使用urllib.request.urlopen()进行。最后需要注意的是,并不是所有的网站都能够得到数据返回,这个时候会提示错误,这点需要注意,提示错误未必就是urllib出错了!!

        这里需要注意的一点是,对于pycharm上进行的python编码,pycharm有可能存在没有提示到位的函数或者变量。而且奇怪的是,对于写错的函数或者变量,pycharm也可能不会进行错误提示。

        使用urllib始终是比较简陋的获取方式,最好还是使用scrapy进行爬虫制作。scrapy的安装会比较麻烦,特别是python2,python3分开安装的时候。

1、对于python2,安装的时候可能会报错,我们可以针对错误信息来解决,通常是vcvarsall.bat缺少的原因,这里microsoft提供了解决方案,直接在以下地址下载并安装即可解决,https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi,另外注意,安装完之后需要重启一下。

2、对于python3,安装的时候报错的信息肯能会更多,根据错误信息来解决是需要注意,可能需要根据最根本的信息来解决。这里针对vcvarsall.bat,microsoft也提供了解决方案,可以下载VC++ build tools解决,直接默认安装就行了,下载地址是:http://download.microsoft.com/download/5/d/6/5d6a1865-11ff-41f8-8af6-60e92d9bbd0b/visualcppbuildtools_full.exe?fixForIE=.exe&__hstc=268264337.d2e4a7d31c4cb114dcb8fee948760e52.1466995252380.1466995252380.1466995252380.1&__hssc=268264337.1.1466995252381&__hsfp=3293872315

但是下载完之后还会有错误信息的,只能一步步根据信息解决了,如果是缺少了某个文件,而我们可以在系统下查找到这个文件,那么可以将这个文件的地址配置到环境变量里面,让系统找到。

而我这里提示的是缺少了libxml2,而实际上这是在安装lxml时候出错的,所以最后的解决方案是直接下载lxml包,然后安装。不过需要还需要在安装wheel包才能安装lxml,因为lxml下载下来的是.whl格式的。另外这里还安装了openssl包,使用python install pyopenssl就可以安装了。

        需要注意的一点是对于不同的包,如果使用的是下载好之后再使用命令安装,那么对于需要编译之后再安装的,需要先python setup.py build,然后再python setup.py install,如果没有需要先编译的,可以直接使用python setup.py install就可以安装了。

        最后需要注意的是,什么修改VC版本,下载VC之类的根本是没有用的。

        这里scrapy就安装好了,但是对于扒下来的数据,需要数据分析工具,这个时候就需要用到pandas包了,pandas是用来解析数据的强大工具,基于操作矩阵的numpy上。另外,对于html分析应该使用beautifusoup4进行。对于爬虫,最好是scrapy+pandas+beautifusoup4。

        其实对于python的爬虫有多个框架可以使用:scrapy,grab,cola,demiurge,爬虫系统:pyspider,portia。其中portia是基于scrapy的可视化爬虫,grab是基于pycurl/multicur,scrapy基于twisted,demiurge是基于pyquery的微框架。restkit是HTTP资源工具包,可以轻易访问HTTP并建立对象。这里学习爬虫的话,以scrapy,grab,cola,pysipder为主。

        scrapy基于twisted包,其中twisted是一个事件驱动框架,具有良好的可扩展性,是一个很好的跨网络开发框架,支持多种网络协议,对于这些协议基本都有客户端和服务器。同时附带基于命令行的工具,所以部署和配置产品级的twisted应用很方便。对于scrapy,可以将twisted当成一个方便的信息管道。

        scrapy中,爬虫分为几种:spider,CrawlSpider,XMLFeedSpider,CSVFeedSpider。

        scrapy官方提供了实例,可以根据实例来编写scrapy的程序。这里需要注意的是scrapy不可以使用pycharm创建,因为scrapy本身有自己的命令,而且创建scrapy项目需要其他的一些文件配置,所以创建scrapy项目需要使用scrapy startproject xxxx创建项目,然后这个项目下就会有需要配置的文件了,这些文件是pycharm不会配置给我们的,后面的跟着scrapy官网的例子就可以编写一个简单的爬虫了,然后运行也是需要用scrapy的命令而不是python的命令,这里需要定位到项目下然后使用scrapy
crawl name运行,这里这个name是项目中Spider的name,而不是项目名,这点需要注意。

        然后即使是完成了上面的所有工作,但是需要注意,运行的时候仍然会出现错误,这是因为使用pip下载的twisted本身是缺少windows部分的,而这个时候twisted的internet模块下就容易缺少例如_win32stdio,_pollingfile这样的文件,这个时候即使下载pypiwin这些的包,也没用了,因为scrapy依赖的是twisted,所以最好的方法是在git上下载twisted的整个项目,然后把完整的twisted替换。git地址是:https://github.com/twisted/twisted

        对于爬虫可以有多种选择,python显然是很好的一种选择,因为他框架齐全,这一点没有一种其他的语言能跟python相比。

        这里使用go开发爬虫,go的爬虫库还不是很完善,但是也有一些爬虫框架,这里为了学习,一开始将不适用爬虫框架。同时需要注意的是,爬虫经过几十年的发展已经有了自己的体系,需要学习的是爬虫,不要拘泥于语言,这样才能更好的了解爬虫。总的来说,需要从爬虫的体系结构入手,了解原理和技术之后编写自己的爬虫,然后再使用框架会比较有利。

        学习爬虫过程中,可以借鉴例如scrapy爬虫框架的设计,学习爬虫的设计。

        爬虫涉及到搜索引擎,但是如果是一般的爬虫,就不用做成像搜索引擎那么高级。

        爬虫可以分为:批量型爬虫,增量型爬虫,垂直型爬虫。

        爬虫的设计一般需要有两个队列:待抓取URL队列,已抓取URL队列。

        爬虫需要解决的技术难题:网页去重和网页反作弊。

        对于网页分为:已下载网页集合,未下载网页集合,可知网页集合,不可知网页集合,已过期网页集合。

未完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: