[转]Python爬虫框架--pyspider初体验

标签: python爬虫pyspider
 分类:
 

目录(?)[+]css

 

以前接触scrapy原本是想也许scrapy可以让个人爬虫更快,可是也许是我没有掌握scrapy的要领,因此爬虫运行起来并无我想象的那么快,看这篇文章就是以前使用scrapy的写得爬虫。而后昨天我又看到了pyspider,说实话原本只是想看看,可是没想到一看就让我喜欢上了pyspider。html

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

安装pyspider

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

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

若是你是64位系统,且不是强迫症,可以接受不完美的事物,就这样安装: 
下载从新编译过的pycurl,而后安装。 
而后cmd输入:pip install pyspider
web

第一个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的朋友能够不用看下面的部分ruby


咱们先看一下 
http://movie.douban.com/tag/这里写图片描述 
咱们要选择的是201三、2012到1989这部份内容,那么咱们右键选择2013而后审查元素这里写图片描述 
这里写图片描述 
而后在连接中右键选择copy css path获得一个而后复制到文本中,咱们选多几个tag的css path,查看一下规律 
这里写图片描述能够看到选中的几个tag的css path不一样点就在我红线标出的地方,那么咱们把他们的不一样之处去掉,只留下相同的部分,也就是最下面的一行,把他复制下来,放到
markdown

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

相关文章
相关标签/搜索