python - Comment explorer le contenu Web couvert par la page suivante/rendu par JS?
PHPz
PHPz 2017-05-18 10:55:01
0
1
1218

Je souhaite extraire le prix de vente actuel de l'article sur la page Web : http://www.igxe.cn/h1z1/43385... et le ITEM_ID du produit correspondant

J'utilise PYTHON2.7 pour fonctionner avec des requêtes. Le code est le suivant :

import requests
import sys
headers = {'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; M032 Build/IML74K) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.1 Mobile Safari/533.1'}
r = requests.get('http://www.igxe.cn/h1z1/433850/product-567592', headers = headers,stream=True)
print r.request.headers['User-Agent']
print r.text
reload(sys)
sys.setdefaultencoding('utf-8')
f = open('/workspace/test.txt', 'w')
f.write (r.text)
f.close

Le fichier de code obtenu contient la plupart des informations sur la page Web, sauf qu'il ne contient pas les informations sur le prix de vente et l'ID de l'article dont j'ai besoin. Cependant, ces informations peuvent être obtenues via l'élément de révision du navigateur. suit :

Cet extrait de code peut être facilement obtenu en inspectant l'élément, mais il n'est pas disponible dans le code source, je suis donc très confus quant à la façon de l'obtenir.
J'ai trouvé le fragment suivant dans le code source. Je me demande si c'est un moyen d'obtenir des informations liées à AJAX :

<script src="/static/csgo/js/page.js"></script>

<script>

var price_sort = 1;
var lock_sort = 1;
var status_locked = 0;
var get_params = function (_page_no, _page_size, _status_locked, _price_sort, _lock_sort) {
    var data = {};
    data['page_no'] = _page_no;
    data['page_size'] = _page_size;
    data['status_locked'] = _status_locked;
    data['price_sort'] = _price_sort;
    data['lock_sort'] = _lock_sort;

    return data;
};

var load_data = function (params) {
    if (!AjaxLogin.is_login_box(params.page_no > 1)) {
        return false;
    }
    $.ajax({
        'type': "GET",
        'url': "/h1z1/433850/get_list_tmp/568258/" + params.status_locked + "/" + params.page_no + "/" + params.price_sort + "/" + params.lock_sort +"?steamid=",
        'data': {},
        'dataType': "json",
        beforeSend: function () {
        },
        success: function (data) {
            var $t_body = $('#js-tbody-data');
            var $page = $('#js-page-html');

            if (data.succ) {

                $t_body.html(data.data_html);
                $page.html(data.page_html);

            } else {
                alert(data.message);
            }

            Core.ui.loader.hide();
        },
        error: function (XmlHttpRequest, textStatus, errorThrown) {
            Core.ui.loader.hide();
        }
    });
};

var load = function () {
    var param = get_params(1, 20, status_locked, price_sort, lock_sort);
    load_data(param);
};

var change_sort_style = function ($dom, _sort) {
    if (_sort == 1) {
        $dom.addClass('sort__up');
        $dom.removeClass('sort__down');
    } else if (_sort == 2) {
        $dom.addClass('sort__down');
        $dom.removeClass('sort__up');
    } else {
        $dom.removeClass('sort__up');
        $dom.removeClass('sort__down');
    }
};

var page_callback = function (page_no) {
    var param = get_params(page_no, 20, status_locked, price_sort, lock_sort);
    load_data(param);
};
$(function () {
    

        var pid = "568258";
    

    Core.ui.tab($('#js-dota-tabs .js-item'), $('#js-dota-panel .js-item'), 'click');

    load();

    var tradeBtn = $('#js-btn-tradeBuy');
    var weaponKey = $('#js-pop-weaponKey');

    var $sort_lock = $('#js-sort-lock');
    var $sort_price = $('#js-sort-price');
    var $page = $('#js-page-html');

    $page.on('click', '.js-page', function () {
        var page_no = $(this).attr('page_no');
        page_callback(page_no);
    });

    $page.on('click', '.js-page-jump', function () {
        var page_no = $(this).prev().val();
        page_callback(page_no);
    });

    $page.on('keyup', '.js-page-jump-no', function (e) {
        $(this).val($(this).val().replace(/[^0-9.]/g, ''));
        if (!$(this).val()) {
            $(this).val(1);
        }
    });

    $page.on('keydown', '.js-page-jump-no', function (e) {
        var curKey = e.which;
        if (curKey == 13) {
            page_no = $('.js-page-jump-no').val();
            page_callback(page_no);
        }
    });

    $sort_lock.on('click', function(){
        if(lock_sort==1){
            lock_sort = 2;
        } else {
            lock_sort = 1;
        }
        load();
        change_sort_style($(this), lock_sort);
        price_sort = 0;
        change_sort_style($sort_price, price_sort);
    });

    $sort_price.on('click', function () {
        if (price_sort == 1) {
            price_sort = 2;
        } else {
            price_sort = 1;
        }
        load();
        change_sort_style($(this), price_sort);
        lock_sort = 0;
        change_sort_style($sort_lock, lock_sort);
    });

    $('#js-find-locked').on('click', function () {
        if ($(this).prop('checked')) {
            status_locked = 1;
        } else {
            status_locked = 0;
        }
        lock_sort = 1;
        price_sort = 1;
        change_sort_style($sort_lock, 0);
        change_sort_style($sort_price, 0);

        load();
    });

    $('#js-buy-count').on('keyup', function () {
        $(this).val($(this).val().replace(/[^0-9]/g, ''));
        var value = $(this).val();
        if (value > 100) {
            $(this).val(100);
        }
    });
    $('#js-money-start').on('keyup', function () {
        $(this).val($(this).val().replace(/[^0-9.]/g, ''));
        var value = $(this).val();
        if (value > 99999) {
            $(this).val(99999);
        }
    });
    $('#js-money-end').on('keyup', function () {
        $(this).val($(this).val().replace(/[^0-9.]/g, ''));
        var value = $(this).val();
        if (value > 99999) {
            $(this).val(99999);
        }
    });

En regardant l'élément d'évaluation, je soupçonne que l'historique des ventes pour le même emplacement dans la liste des ventes écrase les informations actuelles.
En regardant le code source, j'ai l'impression qu'il existe un processus de rendu AJAX ou JS.
En tant que novice, je ne sais vraiment pas comment résoudre ce problème, j'aimerais donc demander conseil aux experts.

PHPz
PHPz

学习是最好的投资!

répondre à tous(1)
给我你的怀抱
# coding: utf-8

import requests

headers = {'X-Requested-With':'XMLHttpRequest'}

url = 'http://www.igxe.cn/h1z1/433850/get_list_tmp/567592/0/1/1/1?steamid='
r = requests.get(url, headers=headers)
print r.text

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal