之前接触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

如果你是64位系统,且不是强迫症,能够接受不完美的事物,就这样安装:

下载重新编译过的pycurl,然后安装。

然后cmd输入:pip install pyspider

第一个pyspider爬虫

打开cmd,输入pyspider,然后打开浏览器输入:http://localhost:5000, 然后就可以进入pyspider的后台了。

第一次打开后台是一片空白的。(点开浏览器后cmd不要关了!)

点击Create,随便输入一个名字(当然名字还是不要乱取)。

点击确定之后就进入一个脚本编辑器了

创建项目的时候也自动创建了一个脚本,这里我们只需要改动脚本OK。我们要爬豆瓣的所有电影,选择http://movie.douban.com/tag/为起始点,也就是从这里开始爬。

首先是改动on_start

@every(minutes=24 * 60)

def on_start(self):

self.crawl('http://movie.douban.com/tag/', callback=self.index_page)

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

可以看到我们是从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

括号里面,告诉爬虫,我们要爬的部分在这个path下!

这就是一个得到css path的方法,就连我这个第一次接触css selector的人都可以找到

下面回归

接着是

a=each.attr.href.replace('www','movie')

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

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

改动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

这里的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

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

到这里,爬虫基本上写完了,点击save,返回dashboard,把爬虫的状态改成Running或者debug,然后再点击右方的run,爬虫就启动了!!

另外这里还有很多的demo哦!http://demo.pyspider.org/

python爬虫框架排行榜-Python爬虫框架--pyspider初体验相关推荐

  1. python可以用break作为变量名_Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】...

    写在前面的: 作为一个控制专业的女研究生,不知道每天在研究什么,但总归逃脱不了码代码的命运.之前也学习过一些C语言.C++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...

  2. Python的GUI的最终选择Tkinter的初体验

    Tkinter是Python的默认的GUI库,像IDLE就是用Tkinter设计出来的,因此直接导入Tkinter模块就行了 最简单的例子: import tkinter as tk root = t ...

  3. python函数代码块以什么开头_Python初体验-开篇 代码全析

    第一次接触Python,现在就开始蟒蛇的威力. 一.首先贴上我们要解析的code: '''Convert file sizes to human-readable form. Available fu ...

  4. python图形化编程wx_慢步python,图形用户界面库:wxPython库 初体验,先建一个窗体...

    慢步写文的初衷是,帮助python爱好者学习python编程.(因为慢步也知道学习不易) 今天慢步要建立一个程序的窗体.什么是窗体?慢步水平及时间有限,直接上图吧. 就是图中的"简单界面&q ...

  5. python kivy显示图片_Kivy 图形界面开发初体验

    本文是觅道文档连载教程<使用Kivy构建现代桌面GUI应用> 的第一个实例,如需细致的介绍,可点击此处进行阅读 Kivy 是一个开源的 Python 第三方库,可以用来快速开发应用程序. ...

  6. python桌面应用开发kivy_Kivy 图形界面开发初体验

    本文是觅道文档连载教程<使用Kivy构建现代桌面GUI应用> 的第一个实例,如需细致的介绍,可在文末点击"阅读原文"进行阅读 Kivy 是一个开源的 Python 第三 ...

  7. 2017年Android百大框架排行榜

    >随意转载,标注作者"金诚"即可 >本文已经开源到Github上,欢迎各位共同编辑.参与到榜单的建设中来 >Github 地址 一.榜单介绍 排行榜包括四大类: ...

  8. 百家争鸣:Android开源框架排行榜

    一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...

  9. 2017年Android百大第三方框架排行榜

    转载自金城:http://www.cnblogs.com/jincheng-yangchaofan 1 榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 ...

最新文章

  1. OpenCart之在线客服(Google Talk)模块教程
  2. flex 会使div撑满_如何讲清楚Flex弹性盒模型(中)?
  3. 「Ubuntu」Ubuntu中的python终端配置(修改终端默认python配置,软连接,不同版本python环境配置)
  4. MyBatis 源码解读-带着问题去看源码
  5. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用阅读笔记
  6. Java中的IO学习总结
  7. 为SQL Server Always On可用性组配置托管服务帐户
  8. python opencv 直方图均衡化_Python opencv—直方图/直方图均衡化/直方图比较,pythonopencv...
  9. docker 进入容器
  10. tensor转换为图片_pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
  11. python工资一般多少西安-Python让我在西安成为高薪quot;贵族”
  12. atitit groovy 总结java 提升效率
  13. 基于程序员职业对于婚配问题的研究——程序员为何单身?
  14. The PostScript backend does not support transparency; partially transparent artists will be rendered
  15. 数据库ALTER语句使用
  16. 武汉大学计算机电气,武汉大学电气与自动化学院
  17. 银行贷款,求每月等额还款金额
  18. uniapp:版本更新(打包wgt)
  19. 新手学网站建设解疑与技巧1200例
  20. 抽屉原理解释及简单举例

热门文章

  1. postman response json 格式化_postman第7讲-核心功能六:Tests(断言)
  2. mac bash 下使用vi 快捷方式——因为没有alt键 所以没有办法 用vi模式也非常方便的...
  3. ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应...
  4. HBase单机环境搭建
  5. numpy nonzero 找出非0元素
  6. 巧用watch命令执行循环操作,来解放我们的双手
  7. python----面试题(一)
  8. TinyXML2 的使用
  9. 【运维】使用FC命令辅助查杀DLL木马
  10. ios中常用数据类型相互转换