Извлечь значение из объекта javascript на сайте, используя xpath и import.io

Я хочу извлечь число, предоставленное объектом javascript на сайте, но я действительно не понимаю, что я делаю.

Я пробовал разные версии, используя одинаковые примеры и рекомендации в import.io сайт и другие учебные сайты, но я получил только 1 из двух результатов: извлек все числа на данной странице или вообще ничего.

Я пробовал например //[contains(.,"Unikālo apmeklējumu skaits:")]@type; //[contains(.,"Unikālo apmeklējumu skaits:")], Скорее всего, нужно добавить туда что-то еще, но я просто этого не знаю.

Ссылка, из которой я хочу извлечь это: https://www.ss.lv/msg/lv/clothes-footwear/womens-clothes/trousers/ikcbb.html и необходимая информация - число после текста "Unikālo apmeklējumu skaits:"который дается javascript.

Надеюсь, кто-нибудь сможет помочь мне с этой проблемой.

2 ответа

Решение

Для новичка в изучении веб-страниц это будет трудной задачей, я постараюсь объяснить это. Прежде всего, xpath, чтобы добраться до этого места, может выглядеть примерно так:

'//td[@class="msg_footer" and contains(text(), "Unik")]'

Теперь у вас есть этот тег (и что он содержит), но если вы проверите, что он не содержит нужного вам числа, этот контент динамически загружается с javascriptи javascript вот этот:

<script type="text/javascript"><!-- 

var ss_w='rādīt numuru';
document.write( '<scr'+'ipt id="contacts_js" src="/js/2015-10-27/37863/VHoBGkpqSV8bfwkdTX9AXEpZXCVDlASIQ1ZV3kK.js?t='+new Date()+'"></scr'+'ipt>' );

--></script>

который можно получить из ответа с помощью этого xpath:

'//script[contains(text(), "contacts_js")]/text()'

из этой строки, вы должны повторить URL-адрес, который входит в srcтак вот этот URL например:

/js/2015-10-27/37863/VHoBGkpqSV8bfwkdTX9AXEpZXCVDlASIQ1ZV3kK.js?t=

и добавить в конец текущую дату, так как javascript создает это с new Date(), Затем вы должны сделать запрос к этому URL (добавив предыдущий домен ответа), так что-то вроде:

https://www.ss.lv/js/2015-10-27/37863/VHoBGkpqSV8bfwkdTX9AXEpZXCVDlASIQ1ZV3kK.js?t=Wed%20Oct%2028%202015%2020:56:42%20GMT-0500%20(PET)

проверьте, что дата является urlencoded. он должен вернуть ответ вроде:

var PHONE_CNT=-1;var PHONE_CNT2=-1;var PHONE_CNT3=-1;var EMAIL_CNT=-1;var SHOW_CNT=22;var PH_c="";var PH_1=0;var PH_2=0;var PH_3=0;

pcc_id = 0; PH_1 = gpzd ("JTg3aCU3QyU1QnolN0MlN0JYcWh6JTVCdCU5NSU4QyU5MnV4ayU5QXElN0IlOTQlNUNweiU5MGtvJTdCJThFJTVF", "55937369");

где вы можете проверить, что значение внутри SHOW_CNT это номер, который вы хотите.

Если вы хотите узнать, как я выяснил, какой запрос и какой сценарий заполняет этот тег ответа, хорошо, что я использовал firebug, в поисках SHOW_CNT во всех ответах, которые включают обращение к вашему URL, которое указывало на указанный мной запрос, а затем пыталось проверить, кто запрашивал это.

Надеюсь, это помогло.

support@import.io - это парни, с которыми можно поговорить, они дают бесплатные советы и помогают постоянно решать проблемы.

Существуют всевозможные советы и приемы, которые вы можете использовать... например, import.io предоставляет (недокументированную бета-версию) службу предварительного рендеринга JavaScript, которая, вероятно, будет работать для вас в этом сценарии. Сбои публикации API иногда вызваны тайм-аутами во время ожидания сайтов для визуализации JS, это исправит это.

http://support.import.io/knowledgebase/articles/623235-infinite-scroll-and-javascript-prerender-beta

Надеюсь, это поможет.

Другие вопросы по тегам