2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报
 分类:
Python(8) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录(?)[+]

 

之前接触scrapy本来是想也许scrapy能够让我的爬虫更快,但是也许是我没有掌握scrapy的要领,所以爬虫运行起来并没有我想象的那么快,看这篇文章就是之前使用scrapy的写得爬虫。然后昨天我又看到了pyspider,说实话本来只是想看看,但是没想到一看就让我喜欢上了pyspider。

先给大家看一下pyspider的后台截图: 
 
pyspider是国人写的一款开源爬虫框架,个人觉得这个框架用起来很方便,至于如何方便可以继续看下去。 
作者博客:http://blog.binux.me/ 
这篇文章是我照着作者的这篇文章所做,爬取得是豆瓣电影,我也照着爬豆瓣电影,但是原文章有些地方不再适用,这里我会有些改正,以适应网页所发生的变化。

安装pyspider

安装pyspider:pip install pyspider 
目测pyspider只支持32位系统,因为安装pyspider前需要先安装一个依赖库:pycurl,而pycurl只支持32位系统,虽然我也在csdn找到别人重新编译过的pycurl,能够在64位安装,然后pyspider也确实安装上去了,但是并不完美!!这里说一下,不完美处就是无法进行调试!!调试很重要吧? 
抱着对pyspider的喜爱,我就果断的重装系统了! 
如果你是32位系统,就这样安装:

pip install pycurl
pip install pyspider
  • 1
  • 2
  • 1
  • 2

如果你是64位系统,且不是强迫症,能够接受不完美的事物,就这样安装: 
下载重新编译过的pycurl,然后安装。 
然后cmd输入:pip install pyspider

第一个pyspider爬虫

  1. 打开cmd,输入pyspider,然后打开浏览器输入:http://localhost:5000, 然后就可以进入pyspider的后台了。第一次打开后台是一片空白的。(点开浏览器后cmd不要关了!)
  2. 点击Create,随便输入一个名字(当然名字还是不要乱取)。
  3. 点击确定之后就进入一个脚本编辑器了创建项目的时候也自动创建了一个脚本,这里我们只需要改动脚本OK。我们要爬豆瓣的所有电影,选择http://movie.douban.com/tag/为起始点,也就是从这里开始爬。
  4. 首先是改动on_start
@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://movie.douban.com/tag/', callback=self.index_page)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里没什么讲的,改个网址而已,callback就是调用下一个函数开始这个起始网页。 
5. 改动index_page函数 
我们先来看一下启示网页张怎样? 
 
有按类型分类,也有按国家/地区分类,还有按年代分类。我们可以选择按国家/地区分类,也可以选择按年代分类,最好不选择按类型分类,因为同一部电影既可能是爱情片、又可能是动作片(感觉怪怪的)。我这里选择按年代分类。 
先看一下index_page我是怎么改的。

@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('#content>div>div.article> table:nth-child(9)>tbody>tr>td>a').items():
a=each.attr.href.replace('www','movie')
self.crawl(a,callback=self.list_page)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

可以看到我们是从response.doc之中选择tag的,然后 
#content>div>div.article> table:nth-child(9)>tbody>tr>td>a 
熟悉css selector的朋友可能会很熟悉这种东西,然而我是第一次接触,所以讲不出个所以然来。其实css selector跟正则表达式、xpath一样,也是一种内容选择的方法,然后也很好理解这是什么意思。


这是分隔符,熟悉css selector的朋友可以不用看下面的部分


我们先看一下 
http://movie.douban.com/tag/ 
我们要选择的是2013、2012到1989这部分内容,那么我们右键选择2013然后审查元素 
 
然后在链接中右键选择copy css path得到一个然后复制到文本中,我们选多几个tag的css path,查看一下规律 
可以看到选中的几个tag的css path不同点就在我红线标出的地方,那么我们把他们的不同之处去掉,只留下相同的部分,也就是最下面的一行,把他复制下来,放到

for each in response.doc('#content>div>div.article> table:nth-child(9)>tbody>tr>td>a').items()
  • 1
  • 1

括号里面,告诉爬虫,我们要爬的部分在这个path下! 
这就是一个得到css path的方法,就连我这个第一次接触css selector的人都可以找到


下面回归


接着是

a=each.attr.href.replace('www','movie')
self.crawl(a,callback=self.list_page)
  • 1
  • 2
  • 1
  • 2

我们先把符合上面css path规则的部分进行了替换,把www替换为了movie。为什么这样做呢?我们分别打开 
http://www.douban.com/tag/2013/?focus=movie 
和 
http://movie.douban.com/tag/2013/?focus=movie 
来看。 
 
 
可以看到www的是没有翻页的!!!而movie的是有翻页的!!!我们要遍历所有电影,当然要有翻页了!!!所以这就是替换的原因所在!

self.crawl(a,callback=self.list_page)
  • 1
  • 1

这段代码就是把得到的类似http://movie.douban.com/tag/2013?focus=movie的网页交给了下一个函数去解析了!

  1. 改动list_page函数
 @config(age=10*24*60*60)
def list_page(self,response):
#获得电影详细内容链接并交给下一个函数处理
for each in response.doc('td > .pl2 > a').items():
self.crawl(each.attr.href,callback=self.detail_page)
#翻页,然后继续由list_page函数处理
for each in response.doc('.next > a').items():
self.crawl(each.attr.href,callback=self.list_page)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里的css path我是有pyspider自带的css selector helper得到的。说到这里就再讲一下pyspider自带的css selector helper怎么用(当然这不是万能的,要不然上面我也不会用浏览器的审查元素进行获取css path) 
我们先点击脚本编辑器的中间上方的run 
选择follows,看到这样的 
点击箭头继续。 
 
顺便说一下,如果点击箭头follows就没有链接了,那么说明你上一个函数的css path没有选对!回去修改!! 
到这里再选一个链接的箭头继续。回到web下。 
 
我们改动list_page的任务有两个,一个是选择一个电影的详细内容的链接交给下一个函数处理,还有一个就是翻页继续由list_page函数处理。 
选择enable css selector path然后点击一个电影链接,就会发现所有的电影链接都被红框框给框起来了! 
 
我们把鼠标选择到图中一处,然后点击网页中间上方的箭头,也就是图中标出的地方,然后就把网页详细内容链接的css path添加进来了! 
同理可以把翻页的css path得到。 
8.改动detail_page函数

@config(priority=2)
def detail_page(self, response):
return {
"url": response.url,
"title":response.doc('* > * > div#wrapper > div#content > h1 > span').text(),
"rate":response.doc('.rating_num').text(),
"导演":response.doc('#info > span:nth-child(1) > span.attrs > a').text()
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这个就简单了,已经到了电影详细内容网页,就看你要什么内容,然后利用css selector helper进行选择就可以了!我这里只返回了url、电影标题、评分和导演四项!

到这里,爬虫基本上写完了,点击save,返回dashboard,把爬虫的状态改成Running或者debug,然后再点击右方的run,爬虫就启动了!! 
另外这里还有很多的demo哦!http://demo.pyspider.org/

初体验完毕!本人语文不好,讲述得不好!只能利用大量图片进行讲述,如有不懂之处可以评论。

转载自:http://blog.csdn.net/u011659379/article/details/48223385

[转]Python爬虫框架--pyspider初体验的更多相关文章

  1. Python爬虫框架--pyspider初体验

    之前接触scrapy本来是想也许scrapy能够让我的爬虫更快,但是也许是我没有掌握scrapy的要领,所以爬虫运行起来并没有我想象的那么快,看这篇文章就是之前使用scrapy的写得爬虫.然后昨天我又 ...

  2. python爬虫框架Pyspider初次接触

    pyspider网站地址:http://docs.pyspider.org/en/latest/.文档比较好,安装起来也非常方便.既然是基于python的框架,那么首先得安装python.微软出的一款 ...

  3. Python爬虫之PySpider框架

    概述 pyspider 是一个支持任务监控.项目管理.多种数据库,具有 WebUI 的爬虫框架,它采用 Python 语言编写,分布式架构.详细特性如下: 拥有 Web 脚本编辑界面,任务监控器,项目 ...

  4. Python的两个爬虫框架PySpider与Scrapy安装

    Python的两个爬虫框架PySpider与Scrapy安装 win10安装pyspider: 最好以管理员身份运行CMD,不然可能会出现拒绝访问文件夹的情况! pyspider:pip instal ...

  5. 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scr ...

  6. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

  7. Linux 安装python爬虫框架 scrapy

    Linux 安装python爬虫框架 scrapy http://scrapy.org/ Scrapy是python最好用的一个爬虫框架.要求: python2.7.x. 1. Ubuntu14.04 ...

  8. Python爬虫框架Scrapy实例(三)数据存储到MongoDB

    Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...

  9. Python爬虫框架Scrapy

    Scrapy是一个流行的Python爬虫框架, 用途广泛. 使用pip安装scrapy: pip install scrapy scrapy由一下几个主要组件组成: scheduler: 调度器, 决 ...

随机推荐

  1. Go语言学习1

    1.go标示符:非空字母或者数字串,第一个必须是字母,不能为关键字,可以是下划线. 2.go关键字: break,default,func,interface,select, case,defer,g ...

  2. Webpack的基本配置

    一.优化项目结构,创建相关的文件,项目结构如下:src文件夹存放相关js文件,index.html项目的首页面,dist文件夹是webpack 打包 目录. index.js内容为: alert('我 ...

  3. C#内存泄漏--event内存泄漏

    内存泄漏是指:当一块内存被分配后,被丢弃,没有任何实例指针指向这块内存, 并且这块内存不会被GC视为垃圾进行回收.这块内存会一直存在,直到程序退出.C#是托管型代码,其内存的分配和释放都是由CLR负责 ...

  4. Nginx目录浏览功能

    要给其他人提供一个patch的下载地址,于是想用nginx的目录浏览功能来做,需要让其他人看到指定一个目录下的文件列表,然后让他自己来选择该下载那个文件:效果如图. 实现步骤:在虚拟主机配置文件里面开 ...

  5. Laravel 模型事件入门

    Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨 ...

  6. linux挂载windows共享文件夹

    1.建立共享文件夹 2.在linux中挂载共享目录 #mount -t cifs -o username=administrator,password=你的系统账号密码 //192.168.0.22/ ...

  7. [日常] NOIP 2017滚粗记

    突然挑了这么个滑稽的时间补了游记... (成绩日常延时再加上人太菜估计基本上就是颓废记录) 然而文化课太废可能会被强制退役QAQ所以先补了再说吧 day0 一大早被老姚交代了个开十一机房门的任务... ...

  8. aix 6.1系统怎么安装?这里有详细图文教程

    今年六月,我们公司出现了一次非常严重的数据丢失的事故.生产服务器崩溃导致所有的业务都陷于停滞,而且由于涉及到公司机密又无法贸然到数据恢复公司进行恢复,可是自己又无法解决.权衡利弊还是决定找一家有保密资 ...

  9. git cherry-pick 整理

    git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作.例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并, ...

  10. video与audio的使用

    HTML5 DOM 为 <audio> 和 <video> 元素提供了方法.属性和事件. 这些方法.属性和事件允许您使用 JavaScript 来操作 <audio> ...