pyspider解析js爬取(采集)内容案例
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()], }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。