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)

  • 相关阅读:
    sys模块详解
    os模块详解2
    tyvj 1203 机器分配
    洛谷 P1496 火烧赤壁
    P1204 [USACO1.2]挤牛奶Milking Cows
    bzoj 2120 数颜色
    P2056 采花
    P1972 [SDOI2009]HH的项链
    9.20模拟赛
    P2709 小B的询问
  • 原文地址:https://www.cnblogs.com/lexus/p/2498065.html
Copyright © 2011-2022 走看看