PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用 Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。在线示 例:http://demo.pyspider.org/ 在线手册:http://docs.pyspider.org 如有问题请加入QQ群讨论:217082390
强大的python接口
强大的WEBUI可视化代码编写,任务监控,项目管理和结果查看功能
MySQL, MongoDB, SQLite 作为后台数据库
Javascript 页面支持
支持任务优先级队列,错误重复抓取,周期性重复抓取和过期抓取
支持分布式部署
pyspider爬取功能很强大只是用的人少点所以案例比较少。笔者推荐想学习使用的朋友直接查看demo.pyspider.org上的案例,常用的功能上面都有案例。下面我们分享一下使用pyspider采集js解析后页面的案例。
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# vim: set et sw=4 ts=4 sts=4 ff=unix fenc=utf8:
# Created on 2014-10-31 13:05:52
import re
from libs.base_handler import *
class Handler(BaseHandler):
'''
this is a sample handler
'''
crawl_config = {
"headers": {
"User-Agent": "BaiDuSpider", #配置用户代理,模拟百度蜘蛛
}
}
def on_start(self):
self.crawl('http://www.jishubu.net/science/article/pii/S1568494612005741',
callback=self.detail_page)
def index_page(self, response):
for each in response.doc('a').items():
if re.match('http://www.jishubu.net/science/article/pii/\w+$', each.attr.href):
self.crawl(each.attr.href, callback=self.detail_page)
@config(fetch_type="js") #添加配置启用js解析功能
def detail_page(self, response):
self.index_page(response)
self.crawl(response.doc('HTML>BODY>DIV#page-area>DIV#rightPane>DIV#rightOuter>DIV#rightInner>DIV.innerPadding>DIV#recommend_related_articles>OL#relArtList>LI>A.viewMoreArticles.cLink').attr.href, callback=self.index_page)
return {
"url": response.url,
"title": response.doc('HTML>BODY>DIV#page-area>DIV#centerPane>DIV#centerContent>DIV#centerInner>DIV#frag_1>H1.svTitle').text(),
"authors": [x.text() for x in response.doc('HTML>BODY>DIV#page-area>DIV#centerPane>DIV#centerContent>DIV#centerInner>DIV#frag_1>UL.authorGroup.noCollab>LI.smh5>A.authorName').items()],
"abstract": response.doc('HTML>BODY>DIV#page-area>DIV#centerPane>DIV#centerContent>DIV#centerInner>DIV#frag_2>DIV.abstract.svAbstract>P').text(),
"keywords": [x.text() for x in response.doc('HTML>BODY>DIV#page-area>DIV#centerPane>DIV#centerContent>DIV#centerInner>DIV#frag_2>UL.keyword>LI.svKeywords>SPAN').items()],
}