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

时间:2015-10-28 22:51:13

标签: xpath import.io

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

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

我试过,例如//[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āloapmeklējumuskaits:”之后的数字,由javascript提供。

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

2 个答案:

答案 0 :(得分:1)

对于网络抓取新手来说,这应该是一项艰巨的任务,我会解释它。首先,到达该位置的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中的网址,所以这个网址例如:

/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,指向我指定的请求,然后尝试检查谁在请求。

希望它有所帮助。

答案 1 :(得分:0)

support@import.io是与他们交谈的人,他们提供免费的建议并帮助解决问题,就像这样。

您可以使用各种提示和技巧...例如,import.io提供(未记录的测试版)JavaScript预呈现服务,在这种情况下可能适合您。 API发布失败有时是由等待站点呈现JS时的超时引起的,这可以解决这个问题。

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

我希望这会有所帮助。