Извлечь значение из объекта 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
Надеюсь, это поможет.