|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
前言
! L6 ^$ @/ r( e6 {5 F5 ]( I/ Mpyspider是支持WebUI的,支持任务监控,项目管理,以及多种数据库的一个强大的爬虫框架,这个真的很好用!!!这主要不是教大家怎么使用,怎么怎么样,主要是让大家懂运行的原理,以及框架的整体结构!4 n' D7 {5 x* ~$ ]! ?& l. S$ ?
今天主要是分为这几部分:
_; q; A, S0 g. L, B
2 ? k! u. `7 H! Z i1.为什么要使用pyspider?
2 W# p+ g, y6 }2.pyspider的安装3 n* e/ v6 Z. u: J& v' d
3.pyspider简单使用' w3 t2 D# w1 D% O; s# g' ^
4.pyspider框架的架构和执行流程
; u4 C& \1 C( m2 c: L一、为什么要使用pyspider?/ h( @ ?: s/ K5 V
我们很好奇,我们明明有了Scrapy框架,为什么还要使用pyspider框架呢?我们说两点
8 ?1 h: T$ O' k0 l4 qpyspider的优点,它有这么几个优点
( i$ s; k. N' L! k9 y) R1.提供WebUI界面,调试爬虫很方便
. ]* r, N1 l" U6 W! O% R8 Q3 c0 _, j2.可以很方便的进行爬取的流程监控和爬虫项目管理
( G( r" g6 O6 T0 b0 P% z$ M2 ~7 j% p3.支持常见的数据库! K6 h* U4 J# E# C, a
4.支持使用PhantomJS,可以抓取JavaScript页面
. C1 b. X0 C* }4 j, I5.支持优先级定制和定时爬取等功能 和Scrapy的比较5 X5 c2 u* o" ^, u& {2 L
1.pyspider 提供 WebUI,Scrapy它采用的是代码和命令行操作,但可以通过对接 Portia 现可视化配置
% b. U2 R% G! B$ e1 `( N/ D2.pyspider 支持 PhantomJS来进行 JavaScript 谊染页面的采集 Scrapy 可以对接 Sc rapy-Splash组件,这需要额外配置
" ~) v& x0 I" K) z9 G9 b* z3.pyspider 中内置pyquery 作为选择器而Scrapy 接了XPath 对接css选择器和正则匹配( }( s# G& t; d( ?+ d6 H% W- r$ @
4.pyspider的可扩展程度不高,Scrapy可以通过对接其他的模块实现强大的功能,模块之间的耦合度低
1 h* W8 p% Z% |总结
! N0 L' Y* U* C" E2 C$ V6 U所以如果要快速实现一个页面的抓取,推荐使用 pyspider,开发更加便捷,如果要应对反爬程度很强、超大规模的抓取,推荐使用 Scrapy ,
) ~/ M/ V+ G" W# U5 l9 w a6 @( ^- w
6 F8 S) e3 O, v/ W, m" o二、pyspider的安装
I; t7 B* w m4 f* o( \pyspider的安装相对简单,不需要安装一些列的依赖库直接使用% ^) W( m, R' p2 [# p
然后等待安装成功就行,也可以使用源码安装 pyspider源码BlinkMacSystemFont, "]
- j3 R' l# h [* G, x% L/ W
8 J$ c4 o' L9 M( U7 i- `: p三、pyspider的简单使用1.安装之后先验证是否安装成功,在CMD下输入 pyspider、4 F7 m# a1 ~7 X7 `% ~
两者是一样的,新的pyspider框架已经整合了,所以使用pyspider就好
1 h) P8 }$ [8 m9 ^& q出现这个则说明运行成功,运行在5000端口,当然这个可以改 2.打开浏览器,输入 弹出两个东西,project name 是你项目的名称 start url 是你要爬取的链接,分别输入以后,再次点击右下角的create,完成创建
8 d0 [! o* t+ c
% E2 j3 G* Z3 x( ?6 L8 E3 ] V; u整个右边部分,分为这么几个东西
* m, ~" C' Z9 B5 l% I6 N1.右上角的save 是保存按钮,更改代码之后几点保存
, C' Q7 f) O7 h8 x2.左上角的#后面的是你创建的一些参数,如创建时间,爬取域名,编码格式等
" X/ c" |( W' \1 i. p3.下面的代码部分是创建项目自动生成的,你可以添加一些你自己的东西,我们在这里完成整个项目的爬取、解析、以及保存等工作
- Z5 Y+ w! U3 v9 J4 [9 }+ lcrawl_config:项目的所有爬取配置统一定义到这里,如定义 Headers 、设置代理等,配置之后全局生效
, k* Q- B4 Z9 d. ]0 t6 [" J@every:设置定时爬取的时间
5 T% v, D$ B6 ?- V, Won_start:爬取入口,初始的爬取请求会在这里产生# E; T; y7 a( G" Z: i3 Y; g0 j
self.crawl:该方法是爬取的主方法,被on_start调用,即可新建一个爬取请求,这里面有这么几个参数第一个参数是爬取的 URL ,这里自动替换成我们所定义的 URL ,还有 个参数 callback ,它指定了这个页面爬取成功后用哪个方法进行解析,代码中指定为 Idex_page()方法,即如果这个 URL 对应的页面爬取成功了,那 Response 将交给 index_page ()方法解析
; t: P1 P: z& P" [/ [5 B1 W. [index_page:方法接收这个 Response 参数,Response 对接了 pyquery 我们直接调用 doc()方法传入相应的css 选择器,就可以像 query 一样解析此页面,代码中默认是 a[href"="http ”],也就是说该方法解析了页面的所有链接,然后将链接遍历,再次调用了 crawl ()方法生成了新的爬请求,同时再指定了 callback为detail_page ,意思是说这些页面爬取成功了就调用 detail_page方法解析这里,index_page ()实现了两个功能,一是将爬取的结果进行解析, 二是生成新的爬取请求
2 @* Y9 u* i. M; e2 F1 sdetail age:接收 Response 作为参数该方法抓取的就是详情页的信息,不会生成新的请求,只对 Response 对象做解析,解析之后将结果以字典的形式返回,将结果保存到数据库# @7 Q! p [ d* S9 _; b
3 m0 c5 H8 ~; Z \8 L/ Q8 I
& H! | |/ h" O# s( H捕获.JPG
; k( r! y6 W( W! w) K& `点击左上角的pyspider可以返回主控制界面. [; I9 a) w. s" T; d
右上角的run可以让程序开始运行" F, K( w( h6 X* G' m
底边一排功能从左到右依次是 enable css selector helper:快捷替换css选择器 web:产看该URL下的web界面,html:产看该url下的HTML格式 ,follows:查看一共发起了多少个请求
- E S! r0 F o9 R1 |1 h! Q2.执行点击run可以看到暂时执行后的结果
7 l0 u2 f% I( a3.如果不正确,或者爬取信息有误,对右边代码部分进行调试' Q; J+ [4 z" A2 A
4.最后返回到控制界面,把status改成running,并点击后面的run按钮开始执行
v# N, @7 o) o3 v3 d分别显示5m、1h、1d5分钟一小时以及一天的爬取结果,绿色表示成功,红色表示请求次数太多而放弃,蓝色表示等待执行
1 D1 D: o) {7 i. Q) M
( W7 ^1 v. L* I" J- `5 N% `一般的使用过程就是确定爬取的网站,创建项目,在crawl_config里进行配置,在index_page里确定要爬取的url,在detail_page里确定要爬取的数据信息5 p, _6 D4 b" u6 f: B
: ^) ?: ]. _8 {5 }9 L# o& d
四、pyspider框架的架构和执行流程1.pyspider框架的架构
: A1 b8 Z9 c8 P! f) \5 ?! hpyspider的架构相对简单分为这么几个部分:scheduler(调度器)、fetcher(抓取器)、processor(脚本执行)任务由 scheduler发起调度,fetcher抓取网页内容, processor执行预先编写的py脚本,输出结果或产生新的提链任务(scheduler)、整个爬取的过程受,Monitor(监控器)的监控,结果保存在Result Worker(结果处理器)中。6 f9 C+ l+ d& N6 K
2.每个 pyspider 的项目对应一个 Python 脚本,该脚本中定义了一个Handler 类,它有on_start ()方法 爬取首先调用 on_start ()方法生成最初的抓取任务,然后发送给 Scheduler进行调度
" g- ?. c; q6 [9 d+ ^5 k
* S+ Q/ E9 T, D. C3.执行流程
T+ V5 z, v0 e9 W) v" J( @5 C+ ^& H7 F Y1 n. c
scheduler 将抓取任务分发给 Fetcher 进行抓取, Fetcher 执行并得到响应,随后将响应发送给Processer
5 [5 o2 Z5 T( a) s3 rProcesser 处理响应并提取 url,新的 URL 生成新的抓取任务,然后通过消息队列的方式通知Schduler 当前抓取任务执行情况,并将新生成的抓取任务发送Scheduler 如果生成了提取结果,则将其发送到结果队列等待 Result Worker 处理# I; \* ^$ s0 c" ?' J- i7 ^
Scheduler 接收到新的抓取任务,然后查询数据库,判断其如果是新的抓取任务或者是需要重试的任务就继续进行调度,然后将其发送回Fetcher 进行抓取0 y+ W7 V8 Q2 O
不断重复以上流程实现抓取
* c) y, Q& f. N& y' I: m. J5 M3 s$ t2 c( }
五、出现错误2 A' y% \( i5 ?% Y7 J; P" n
pyspider安装和使用出现的一些问题
1 y% P S* s# ?2 J& h* { L初学pyspider跳过的坑
& i' R* J. {% c% F8 g6 c基本上常见的错误都在这了!
2 | r1 S( ?' U- s# B' l( f$ C) b4 \$ x, u
|
|