zoukankan      html  css  js  c++  java
  • [Python][Javascript] Python抓Javascript產生的頁面 (phantomJs)

    [Python][Javascript] Python抓Javascript產生的頁面 (phantomJs)

    一向都是用Python的Beautiful Soup來parse網頁,現在出到第四版,更好用文件也好看多了。
    from BeautifulSoup import BeautifulSoup
    
    改成
    from bs4 import BeautifulSoup
    
    method name也有改,參考。 不過這次遇到的是內容是javascript產生的,如play.google.com,以前可能看一下js的code,學他送http request出去就可抓回來,現在的js越來越複雜,不好搞。 
    幸好有PhantomJS這種東西(headless WebKit with JavaScript API),就可以很方便的用webkit把網頁內容全開出來(跑完javascript)。 既然是javascript,DOM的selector就用jquery吧(page.injectJs("jquery.min.js"))。
    var page = require('webpage').create(),
        t, address;
    
    if (phantom.args.length === 0) {
        //console.log('Usage: loadspeed.js ');
        phantom.exit();
    } else {
        address = phantom.args[0];
        page.open(address, function (status) {
            if (status !== 'success') {
                //console.log('FAIL to load the address');
            } else {
              
               if (page.injectJs("jquery.min.js")) {
                    //console.log("jQuery loaded...");
                }
    
                var get_data = page.evaluate(function () {
                  var data = {}
                  data['title'] = $('h1.doc-banner-title').text();
                  data['content'] = $('#doc-original-text').text();
                  data['icon'] = $('.doc-banner-icon img').attr('src');
                  var img_list = []
                  $('.screenshot-carousel-content-container img').each(function(){ img_list.push($(this).attr('src')) });
                  data['images'] = img_list
    
                  return JSON.stringify(data);
                });
              console.log(get_data);
              phantom.exit();
            }
    
        });
    }
    
    command line執行$ phantomjs my_scrapy.js my_url console.log裡的資料就回跑出來了。 Python裡用commands.getoutput,再json.loads把JSON拆成dict,大改就這樣吧。
    import commands
    import json
    
    out = commands.getoutput(my_cmd)
    data = json.loads(out)

  • 相关阅读:
    Thinkphp5.0 模型hasOne、hasMany、belongsTo详解
    ES6中async和await说明和用法
    必会SQL练习题
    Git初识学习
    CI框架简单使用
    JavaScript 的 this 原理
    javascript实现游戏贪吃蛇
    js清除childNodes中的#text(选项卡中会用到获取第一级子元素)
    JavaNIO
    MongoDB入门_shell基本操作
  • 原文地址:https://www.cnblogs.com/lexus/p/2498065.html
Copyright © 2011-2022 走看看