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()],
                }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。