使用 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
希望对您有所帮助。
我想提取站点中 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
希望对您有所帮助。