| 
 | 
 
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册 
 
 
 
x
 
前言 
% W1 A* y0 `/ a1 a) l) ypyspider是支持WebUI的,支持任务监控,项目管理,以及多种数据库的一个强大的爬虫框架,这个真的很好用!!!这主要不是教大家怎么使用,怎么怎么样,主要是让大家懂运行的原理,以及框架的整体结构!0 s! P- O+ r) u7 v, \* E 
今天主要是分为这几部分:% U+ D  B0 ~& i/ t! c  A0 N$ [( S 
4 j. F+ t7 W; y+ G3 g8 m 
1.为什么要使用pyspider?! [: }4 C! v' A 
2.pyspider的安装 
# v6 `" }9 n% G3.pyspider简单使用* S. O% R" E, i9 B3 _ 
4.pyspider框架的架构和执行流程  
4 Q+ O% T# Z6 o3 `% |一、为什么要使用pyspider?9 J1 z8 U, H4 H( T8 } 
我们很好奇,我们明明有了Scrapy框架,为什么还要使用pyspider框架呢?我们说两点 
/ {7 v3 A, |3 ?# Spyspider的优点,它有这么几个优点) r7 c+ {+ ^% b. r1 R  T8 N6 K9 Z 
1.提供WebUI界面,调试爬虫很方便 
/ \' f1 Y% Y2 W$ a$ a' \1 U" ]2.可以很方便的进行爬取的流程监控和爬虫项目管理 
" j* G* |3 l$ [' F0 j; X5 J3 l3.支持常见的数据库* ~; u/ F. B% ?* K# o6 U/ W7 E 
4.支持使用PhantomJS,可以抓取JavaScript页面0 x1 N# z/ Q  |0 o# f, i 
5.支持优先级定制和定时爬取等功能 和Scrapy的比较 
! h( y# u8 s+ N( c# Z, p3 D  H( x1.pyspider 提供 WebUI,Scrapy它采用的是代码和命令行操作,但可以通过对接 Portia 现可视化配置' z" t6 X: c, [1 m) R5 o* Z2 ] 
2.pyspider 支持 PhantomJS来进行 JavaScript 谊染页面的采集 Scrapy 可以对接 Sc rapy-Splash组件,这需要额外配置 
5 q6 B+ Y  [; y. Y/ \0 x: u3.pyspider 中内置pyquery 作为选择器而Scrapy 接了XPath 对接css选择器和正则匹配7 a/ p6 _) D+ f5 |  G5 n) z 
4.pyspider的可扩展程度不高,Scrapy可以通过对接其他的模块实现强大的功能,模块之间的耦合度低  ' j2 G1 Q! b$ i( c' K' r 
总结 
. N+ b* x. d& D6 o所以如果要快速实现一个页面的抓取,推荐使用 pyspider,开发更加便捷,如果要应对反爬程度很强、超大规模的抓取,推荐使用 Scrapy ,* o0 N9 O" M/ m' e 
0 J& v" {/ R; I& B2 n# o 
二、pyspider的安装 
$ N/ j4 r. d8 F$ a# V9 ^! j8 Q9 ~. \pyspider的安装相对简单,不需要安装一些列的依赖库直接使用 
0 y  ^8 p, J+ J1 [& x然后等待安装成功就行,也可以使用源码安装 pyspider源码BlinkMacSystemFont, "] 
, k4 ]$ D, C3 \5 R, A0 t3 D( M: R( n9 e$ a9 }4 C1 D3 m. p 
三、pyspider的简单使用1.安装之后先验证是否安装成功,在CMD下输入 pyspider、 
  r9 W& n/ b) a" t. q两者是一样的,新的pyspider框架已经整合了,所以使用pyspider就好 
8 w) U3 j$ S* ]6 V8 g出现这个则说明运行成功,运行在5000端口,当然这个可以改 2.打开浏览器,输入 弹出两个东西,project name 是你项目的名称 start url 是你要爬取的链接,分别输入以后,再次点击右下角的create,完成创建# E7 t  \, I; n" b0 O2 i 
  I  J6 }9 p, U% k6 [- b" B 
整个右边部分,分为这么几个东西, A8 J1 K# \! b2 x$ f 
1.右上角的save 是保存按钮,更改代码之后几点保存 
% u0 A0 `4 |1 G# v1 P: j2.左上角的#后面的是你创建的一些参数,如创建时间,爬取域名,编码格式等 
3 ~2 ^4 F: d0 n+ K2 `8 k2 V8 j3.下面的代码部分是创建项目自动生成的,你可以添加一些你自己的东西,我们在这里完成整个项目的爬取、解析、以及保存等工作 
* _! y; Y3 f3 x# U+ _( jcrawl_config:项目的所有爬取配置统一定义到这里,如定义 Headers 、设置代理等,配置之后全局生效 
/ Z4 }  m( w) ]# _+ n9 X/ o# C@every:设置定时爬取的时间 
+ T) q1 k& i" Z% ]- Lon_start:爬取入口,初始的爬取请求会在这里产生 
4 U* N8 Z) R. p( ?$ Eself.crawl:该方法是爬取的主方法,被on_start调用,即可新建一个爬取请求,这里面有这么几个参数第一个参数是爬取的 URL ,这里自动替换成我们所定义的 URL ,还有 个参数 callback ,它指定了这个页面爬取成功后用哪个方法进行解析,代码中指定为 Idex_page()方法,即如果这个 URL 对应的页面爬取成功了,那 Response 将交给 index_page ()方法解析 
0 @: S- L' n$ ^index_page:方法接收这个 Response 参数,Response 对接了 pyquery 我们直接调用 doc()方法传入相应的css 选择器,就可以像 query 一样解析此页面,代码中默认是 a[href"="http ”],也就是说该方法解析了页面的所有链接,然后将链接遍历,再次调用了 crawl ()方法生成了新的爬请求,同时再指定了 callback为detail_page ,意思是说这些页面爬取成功了就调用 detail_page方法解析这里,index_page ()实现了两个功能,一是将爬取的结果进行解析, 二是生成新的爬取请求 
. `! b( h9 x: ~) w+ c' j- ^# bdetail age:接收 Response 作为参数该方法抓取的就是详情页的信息,不会生成新的请求,只对 Response 对象做解析,解析之后将结果以字典的形式返回,将结果保存到数据库 
* \/ F' B/ N9 [7 F0 l! F8 h: b! x8 y5 G8 u; Q7 W 
$ o% k# |8 y8 F5 P* P, j. k% G' [$ M" n 
捕获.JPG 
( z! |- e* n! s6 t点击左上角的pyspider可以返回主控制界面( x5 e9 E; ]4 n, w1 y 
右上角的run可以让程序开始运行 
, Z& ^  Q+ Q, K1 a8 t0 y) l底边一排功能从左到右依次是 enable css selector helper:快捷替换css选择器 web:产看该URL下的web界面,html:产看该url下的HTML格式 ,follows:查看一共发起了多少个请求. G. ^5 u  K  n& L 
2.执行点击run可以看到暂时执行后的结果 
) R' F- E4 [# n3.如果不正确,或者爬取信息有误,对右边代码部分进行调试: |0 [, B5 p) e: c, J2 G 
4.最后返回到控制界面,把status改成running,并点击后面的run按钮开始执行 
" t, P7 I# d6 Y; h4 v% p) e- y分别显示5m、1h、1d5分钟一小时以及一天的爬取结果,绿色表示成功,红色表示请求次数太多而放弃,蓝色表示等待执行 
4 t0 U4 W8 u+ J% v: p' v 
" Z, x2 q5 `$ S一般的使用过程就是确定爬取的网站,创建项目,在crawl_config里进行配置,在index_page里确定要爬取的url,在detail_page里确定要爬取的数据信息2 |7 N. i; M+ ~( _0 X4 G 
! c$ K9 N0 \1 l1 s; W1 B 
四、pyspider框架的架构和执行流程1.pyspider框架的架构 
6 {2 F! ?' o" ?pyspider的架构相对简单分为这么几个部分:scheduler(调度器)、fetcher(抓取器)、processor(脚本执行)任务由 scheduler发起调度,fetcher抓取网页内容, processor执行预先编写的py脚本,输出结果或产生新的提链任务(scheduler)、整个爬取的过程受,Monitor(监控器)的监控,结果保存在Result Worker(结果处理器)中。  `( A" e1 r# u: T 
2.每个 pyspider 的项目对应一个 Python 脚本,该脚本中定义了一个Handler 类,它有on_start ()方法 爬取首先调用 on_start ()方法生成最初的抓取任务,然后发送给 Scheduler进行调度 
/ |- @% k" f" `; S$ R+ l 
  H# N6 I, s' @9 X3 k  |" ]3.执行流程 
" L2 _# x  `* U; r* E/ `. ^& c% F/ s0 E" D5 }" V 
scheduler 将抓取任务分发给 Fetcher 进行抓取, Fetcher 执行并得到响应,随后将响应发送给Processer! ?2 J# Q' v% F# ?! @1 D- T7 U 
Processer 处理响应并提取 url,新的 URL 生成新的抓取任务,然后通过消息队列的方式通知Schduler 当前抓取任务执行情况,并将新生成的抓取任务发送Scheduler 如果生成了提取结果,则将其发送到结果队列等待 Result Worker 处理: s, T5 M9 F; Y8 t% P 
Scheduler 接收到新的抓取任务,然后查询数据库,判断其如果是新的抓取任务或者是需要重试的任务就继续进行调度,然后将其发送回Fetcher 进行抓取' [' |9 Q1 @$ ~0 N, d/ m 
不断重复以上流程实现抓取 
0 O5 E2 h9 v8 F 
3 A/ c; G  J# X. A/ i五、出现错误! u' b* p4 Q, p5 l( F) J 
pyspider安装和使用出现的一些问题9 ~% W) Z8 {$ O7 _3 [- O 
初学pyspider跳过的坑1 ^" P. w: _1 f8 @# w 
基本上常见的错误都在这了! 
$ I# G% h0 E" P& _4 e8 h3 h7 |' O- d$ \9 x, C+ A: M 
 |   
 
 
 
 |