自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 scrapy-redis(八):安装scrapy监控app--graphite

graphite是基于python创建的一个web监控程序,分三个部分组成: (1)carbon:一个twisted守护进程,用于监听时间序列的数据。 (2)whisper:数据库,用于存放时间序列的数据 (3)graphite-web:从whisper中获取数据,然后绘制成图形,并在网页中展示出来。一个配置好的graphite,如下图所示: 下面就上图给大家详细介绍一下安装步骤。我是在云主

2017-01-01 19:53:32 3577 2

原创 scrapy-redis(七):部署scrapy

一般我们写好scrapy爬虫,如果需要启动的话,需要进入scrapy项目的根目录,然后运行以下命令:scrapy crawl {spidername}这样我们就可以在终端查看到爬虫信息了。但爬虫运行状态还需要给上级领导看,或者自己有空的时候就看看,总不可能想看的时候就登录服务器。下面就给大家介绍scrapy官方推荐的部署爬虫项目的方法。 需要安装scrapyd和scrapyd-client对于sc

2016-12-27 16:24:49 4155 3

原创 linux问题记录:源码安装python遇到make: *** [libinstall] Error 1错误

我用的是ubuntu 14.04,上面的python版本是2.7.6,有点老,所以就去升级一下。而ubuntu 14.04源里面自带的最新版本的python就是2.7.6,所以就想着去源码安装一下。可以在编译到最后一步的时候,遇到了下面的问题:其实编译安装时挺花时间的,到最后却失败了。最后google了一下,发现可以使用下面的方法升级python:sudo add-apt-repository pp

2016-12-26 15:50:24 14883 3

原创 linux问题记录:too many levels of symbolic links

今天在ubuntu上reload apache的时候遇到了下面的问题: 引起这个问题的原因就是,我在apache的/etc/apache2/sites-enabled这个目录建立软连接的时候,采用了相对路径,就引发了这个问题。解决方法也是非常的简单,在建立软连接的时候,采用绝对路径就可以了,如下所示:sudo ln -s /etc/apahe2/sites-available/example.co

2016-12-19 17:53:13 29944

原创 tornado学习笔记(三):子类需要重写的RequestHandler的方法

问题tornado.web.RequestHandler中哪些方法有必要在子类中重写?解决方案 参考tornado的源码,可以得到我们需要在子类中重写的方法示例下面列出RequestHandler中需要重写的方法RequestHandler.initialize()RequestHandler.prepare()RequestHandler.get()RequestHandler.p

2016-12-16 15:43:05 2154

原创 tornado学习笔记(二):如何在tornado中以异步的方式调用同步函数

问题 如何在tornado的coroutine中调用同步阻塞的函数解决方案 使用python内置标准库的concurrent.futures.ThreadPoolExecutor解决示例#-*-coding:utf-8-*-import timefrom tornado.gen import coroutinefrom tornado.ioloop import IOLoo

2016-12-15 17:20:41 1854

原创 tornado学习笔记(一):如何给ioloop.run_sync()中调用的函数传入参数

问题 如何给tornado.ioloop.IOLoop中的run_sync方法中调用的函数添加参数解决方案 使用functools.partial解决示例from tornado import genfrom tornado.ioloop import IOLoop@gen.coroutinedef func(): print('this is the %(name)

2016-12-14 16:09:59 3529 1

转载 git命令大全

git init # 初始化本地git仓库(创建新仓库) git config –global user.name “xxx” # 配置用户名 git config –global user.email “xxx@xxx.com”

2016-12-12 09:25:18 313

原创 scrapy-redis(六):scrapy中如何定时的运行一个任务

相信开发过scrapy的朋友对scrapy终端的日志输出非常熟悉,它会间隔一段时间输出抓取的状态,比如最近60秒内,抓取了几个网页,成功获取到了几个item。这些对于我们观察spider的运行是非常有用的,我们可以观测spider的抓取情况,速度是否在预期之中等等。有时候,我们也需要自定义一个extension,用来定时的收集scrapy的stats,然后利用这些stats进行绘制图形,这样我们就可

2016-12-07 15:59:57 5956 1

原创 scrapy-redis(五):scrapy中信号工作的原理

scrapy有内置的信号,比如spider_opened,spider_closed,item_dropped等等。我们可以利用这些信号来做一些初始化的工作和数据收集统计。比如spider_opened信号就方便了我们在爬虫启动的时候,创建到数据库的连接等,item_dropped的信号就方便我们去收集在爬虫工作的期间,收集被丢弃的item的数量等等。这篇文章不是告诉大家如何使用scrapy信号的,

2016-12-05 14:43:28 4735 2

原创 scrapy-redis(四):使用xpath时的一个小细节

在解析网页的时候,我们一般情况下使用的是xpath,因为xpath定位很精准,基本上不会出现定位错位,获取到脏数据的情况。xpath使用起来也是非常的方便,firefox就有xpath的插件,可以直接定位获取到一个元素,而不用我们手动的去寻找。比如下面就是一个典型的利用浏览器获取到的xpath: 这个xpath的定位是非常精准的,绝对不会出现定位错误,但是最后我们却发现获取不到想要的数据,这是

2016-12-04 12:29:43 1100

原创 scrapy-redis介绍(三):如何自定义user-agent

一般情况下,我们在编写爬虫的时候都会不停的更换用户代理,这样就可以降低被ban掉的风险。在scrapy中,默认会给我们一个user-agent,这明显是不可以直接拿来用的,所以,我们需要修改这一部分,以便每个request对象在交给下载器之前,都会随机获取一个标准浏览器的user-agent,尽最大可能的模拟真实用户的请求。具体实现是通过request对象的headers属性,以及自定义一个down

2016-12-01 11:23:32 3340

原创 安装独立的python虚拟环境virtualenv

就拿scrapy来说吧,scrapy可以完美的运行在python2环境下,而在python3中相对不是那么的给力,这主要是因为twisted的原因。而我们有些程序有需要在python3下面运行,比如基于tornado或asyncio的coroutine。这就是python虚拟环境的用武之地了,就跟虚拟机一样,会创建一个完全独立的环境,我们就可以在这个环境下进行一些操作。以下操作是在windows下进

2016-11-29 09:10:29 1177

原创 python网络爬虫(五):并发抓取

在进行单个爬虫抓取的时候,我们不可能按照一次抓取一个url的方式进行网页抓取,这样效率低,也浪费了cpu的资源。目前python上面进行并发抓取的实现方式主要有以下几种:进程,线程,协程。进程不在的讨论范围之内,一般来说,进程是用来开启多个spider,比如我们开启了4进程,同时派发4个spider进行网络抓取,每个spider同时抓取4个url。所以,我们今天讨论的是,在单个爬虫的情况下,尽可能的

2016-11-28 15:11:22 13565 1

原创 scrapy-redis(二)

在scrapy中帮助我们进行一些预处理的组件称之为middleware。比如将request对象交给下载器下载之前,就会通过下载中间件的process_request()方法。这些中间件的用处非常大,我们可以详细的了解,以方便编写自己的中间件。1.spider-middleware 该中间件位于spider和engine之间,按照我们给出的数字依次从小到大,顺序执行。数字越小的中间件越靠近engi

2016-11-23 15:50:35 2448 3

原创 scrapy-redis介绍(一)

scrapy是python里面一个非常完善的爬虫框架,实现了非常多的功能,比如内存检测,对象引用查看,命令行,shell终端,还有各种中间件和扩展等,相信开发过scrapy的朋友都会觉得这个框架非常的强大。但是它有一个致命的缺点,不支持分布式。所以本文介绍的是scrapy_redis,继承了scrapy的所有优点,还支持分布式。1.安装scrapy安装scrapy非常简单:sudo pip inst

2016-11-22 22:11:53 13461

原创 python爬虫(四)

在写爬虫程序的时候,我们希望能够并发的抓取,而不是一次只抓取一个url。对于高并发的抓取,目前有三种方案:多进程,多线程,协程(python3.x)。论性能来说,协程最佳(异步执行),tornado就是采用了协程。另外,tornado的文档上,有一个并发的爬虫的例子。但目前我采用的是python2.7,那个例子看不懂啊。至于多进程,会消耗较多的cpu。如果电脑不错,开启多进程速度很快,但是进程有一些

2016-11-07 21:59:13 605

原创 python网络爬虫(三)

在第二篇中我们介绍从响应中提取结构化数据,那接下来就是需要保存数据。对于html网页(主要用于缓存)和结构化数据的保存,我选择了MySQL, 当然也可以使用NoSQL的产品, 比如mongodb;对于网页中提取出的url,我们可以保存到本地的文件中,也可以保存到MySQL或者mongodb中等,但为了高效,我选择了内存数据库redis,相对来说redis的永久存储性能要弱于MySQL等产品,但他的查

2016-10-31 21:40:05 708

原创 python网络爬虫(二)

在第一篇中,我们介绍了如何进行发起一个http请求,并接受响应。在这一部分中,我们介绍一下如何解析网页并提取我们需要的数据。我们采用requests这个库进行一个网页请求。r = requests.get('https://www.example.com', headers, **kwargs )通过这一句代码,我们即可获得服务器传给我们的响应内容(不考虑连接错误等情况)。假设返回的是200的响应。

2016-10-29 20:16:30 1316 1

原创 python实现stack(栈)和队列(queue)

栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于: stack:后进先出 栈示意图queue:先进先出 队列示意图 注意,stack和queue是没有查询具体某一个位置的元素的操作的。但是他们的排列是按顺序的对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。

2016-10-29 18:31:27 9796

原创 python实现双向链表

相对于单向链表,双向链表多了一个指向前面一个节点的指针,如下图所示: 图片来源于网络利用python实现也非常的容易:class Node(object): def __init__(self, value): self.value = value self.next = None self.prev = Noneclass LinkLi

2016-10-26 22:43:55 1476

原创 python网络爬虫(一)

Python是一门高级的动态的语言,利用它进行网络数据的抓取是非常方便的。代码的实现非常的精简。在本次python爬虫中,我们将使用到以下python第三方库:requests(urllib3) 用于发起http请求,相对于python自带的urllib2模块,更加的pythonic redis-py, 连接redis服务器,用于保存待抓取的url队列 gevent 实现并发抓取,相对于pyth

2016-10-25 12:03:56 812

原创 python实现单向链表

在C语言中,用指针来实现单向链表非常简单。而python是不存在指针这种结构的,但我们也可以实现链表数据结构,使用类和对象的引用即可达到C语言中的指针的效果。 图片来自于网络图中我们可以看到,单向链表的每一个节点会包含两项数据,当前节点的元素,以及对下一个节点的引用(C语言中就是指针)。并且最后一个元素的引用为None(C语言中就是NULL).下面我们定义节点对象class Node(obje

2016-10-24 21:01:56 582

转载 python之禅 The Zen of Python

The Zen of Python, by Tim PetersBeautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Spar

2016-10-21 08:48:10 565

原创 windows下安装python basemap时使用Visual Studio编译geos时遇到的问题以及解决方法

python的basemap这个库是建立在geos上的,所以我们就需要先安装geos。于是我就下载了3.5.0版本,但在安装编译geos时遇到了一个小问题,如下图所示: 这一看就是源代码出了问题,可是我目前只会python,完全不会c++。只好去查询相关资料。 之后在geos的官网上发现了下面的文章: http://lists.osgeo.org/pipermail/geos-devel/

2016-10-13 09:59:15 2171

原创 matplotlib数据可视化入门-python

matplotlib是matlab的python api接口,可以制作出高质量的2D以及3D图形。操作简单,只需几行代码就可以搞定大部分的数据可视化需求,实乃幸事。本文假设我们已经安装了必备的库。一、创建figure和axes对象import matplotlib.pyplot as pltimport pandas as pd#创建figure对象,默认我们可以不用传入任何参数fig = p

2016-10-10 14:51:13 1051

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除