使用 xpath 和 import.io 从站点中的 javascript 对象中提取值

Extract value from javascript object in site using xpath and import.io

我想提取站点中 javascript 对象提供的数字,但我真的不明白我在做什么。

我在 import.io 站点和其他教程站点中使用相似的示例和指南尝试了不同的版本,但我只得到了两个结果中的一个:提取给定页面上的所有数字或什么都没有。

我尝试过,例如//[contains(.,"Unikālo apmeklējumu skaits:")]@type; //[contains(.,"Unikālo apmeklējumu skaits:")]。很可能有必要在其中添加其他内容,但我只是不知道。

Link 我有兴趣从中提取:https://www.ss.lv/msg/lv/clothes-footwear/womens-clothes/trousers/ikcbb.html 并且所需的信息是文本 "Unikālo apmeklējumu skaits:" 之后的数字,由 javascript.[=16 给出=]

希望有人能帮我解决这个问题。

对于网络抓取的新手来说,这应该是一项艰巨的任务,我会解释一下。首先,到达该位置的 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()'

从该字符串中,您应该复制 src 中的 url,因此 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)

检查日期是否已 url 编码。它应该 return 像这样的响应:

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

希望对您有所帮助。