zoukankan      html  css  js  c++  java
  • pyspider示例代码一:利用phantomjs解决js问题

    本系列文章主要记录和讲解pyspider的示例代码,希望能抛砖引玉。pyspider示例代码官方网站是http://demo.pyspider.org/。上面的示例代码太多,无从下手。因此本人找出一下比较经典的示例进行简单讲解,希望对新手有一些帮助。

    示例说明:

    如果页面中部分数据或文字由js生成,pyspider不能直接提取页面的数据。pyspider获取页面的代码,但是其中的js代码phantomjs,解决js代码执行问题。

    使用方法:

    方法一:在self.crawl函数中添加fetch_type="js"调用phantomjs执行js代码。

    方法二:为函数添加参数@config(fetch_type="js")。

    示例代码:

    1、www.sciencedirect.com网站示例

    #!/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": "BaiDu_Spider",
            },
            "timeout":300,
            "connect_timeout":100
        }
        
        def on_start(self):
            self.crawl('http://www.sciencedirect.com/science/article/pii/S1568494612005741',timeout=300,connect_timeout=100,
                       callback=self.detail_page)
            self.crawl('http://www.sciencedirect.com/science/article/pii/S0167739X12000581',timeout=300,connect_timeout=100,
                       age=0, callback=self.detail_page)
            self.crawl('http://www.sciencedirect.com/science/journal/09659978',timeout=300,connect_timeout=100,
                       age=0, callback=self.index_page)
            
        @config(fetch_type="js")
        def index_page(self, response):
            for each in response.doc('a').items():
                url=each.attr.href
                #print(url)
                if url!=None:
                    if re.match('http://www.sciencedirect.com/science/article/pii/\w+$', url):
                        self.crawl(url, callback=self.detail_page,timeout=300,connect_timeout=100)
            
        @config(fetch_type="js")
        def detail_page(self, response):
            self.index_page(response)
            self.crawl(response.doc('#relArtList > li > .cLink').attr.href, callback=self.index_page,timeout=300,connect_timeout=100)
            
            return {
                    "url": response.url,
                    "title": response.doc('.svTitle').text(),
                    "authors": [x.text() for x in response.doc('.authorName').items()],
                    "abstract": response.doc('.svAbstract > p').text(),
                    "keywords": [x.text() for x in response.doc('.keyword span').items()],
                    }
    记录自己、分享公众、成就别人
  • 相关阅读:
    TestNG:org.openqa.selenium.firefox.NotConnectedException: Unable to connect
    Python 程序员经常犯的 10 个错误
    python爬虫框架scrapy实例详解
    使用python进行汉语分词
    Python监控日志程序
    用Python读取excel中的数据
    Python 文件处理
    10 款最好的 Python IDE
    自动化测试代码架构浅谈
    Robotium如何向下拖动屏幕
  • 原文地址:https://www.cnblogs.com/microman/p/6110242.html
Copyright © 2011-2022 走看看