2013-01-07 24 views
1

我對phantomjs非常陌生。我一直在干擾以下太久。我知道我錯過了很簡單的事情。我有以下的sitemap.xml:使用phantomjs抓取站點地圖

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
    <url> 
    <loc>/</loc> 
    <changefreq>always</changefreq> 
    <priority>1.0</priority> 
    </url> 
    <url> 
    <loc>/vehicles</loc> 
    <lastmod>2013-01-07</lastmod> 
    </url> 
</urlset> 

現在我正在試圖做的是使用phantomjs從XML文檔獲取URL值。我有以下幾點。

page.open("sitemap.xml", function(status) { 
    if(status !== "success") { 
     console.log("Unable to open sitemap."); 
    } else { 
     // Stuck here 
     console.log(page.content); 
    } 
}); 

xml文件的內容打印到正確屏幕,但是我怎麼使用文檔現在使用XML玩?我只需要能夠獲取每個url節點的第一個子節點。我已經嘗試將xml文檔解析爲DOMParser,但這看起來不正確。您的幫助將不勝感激。

另外你如何調試phatomjs,讓我可以看到它的全部榮耀的對象?例如,如果我在開發工具中使用console.log對象,則可以將其展開並查看鍵 - 值對。我猜終端不提供這種奢侈?

回答

3

使用libxmljs解析您的xml字符串並獲取您想要的數據!

+0

現在好了,那是真棒。會試試看。上面使用DOMParser和庫有什麼區別? – TYRONEMICHAEL

+0

libxmljs將你的xml轉換成一個javascript對象,它爲你提供使用javascript對象(循環等)的所有標準可能性。你可以在這裏閱讀更多:http://blog.nodejitsu.com/6-must-have-nodejs-modules – hereandnow78

+0

是在DOMParser也一樣的印象。無論如何非常感謝! – TYRONEMICHAEL

0

另一個想法,你可以jQuery注入的頁面,只是解析XML作爲這樣的:

page.open("sitemap.xml", function(status) { 
    if(status !== "success") { 
     console.log("Unable to open sitemap."); 
    } else { 
     // Stuck here 
     console.log(page.content); 
     page.injectJs('j-query.js');//path to jquery 
     var output = page.evaluate(function(){ 
          return $('url *:first-child');   
         }); 
    } 
}); 
+0

我已經嘗試注入到XML頁面的JJ,它似乎並沒有工作。會再給它一個禮物! – TYRONEMICHAEL

5

PhantomJS允許您從頁面上下文中調用JavaScript。使用普通的舊javascript查看我的解決方案。

的假設是網絡地圖看起來像這樣

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
<url> 
<loc>http://example.com/</loc> 
<lastmod>2014-07-07T14:09:27+00:00</lastmod> 
<changefreq>always</changefreq> 
</url> 

我能得到的URL中使用下面的代碼上面的地圖。

var page = require('webpage').create(); 
page.open('http://xxxx/static/sitemap/sitemap.xml', function() { 
     var content = page.content; 
     parser = new DOMParser(); 
     xmlDoc = parser.parseFromString(content,'text/xml'); 
     var loc = xmlDoc.getElementsByTagName('loc'); 
     console.log(loc.length); 
     for(var i=0; i < loc.length; i++) 
     { 
      var url=loc[i].textContent; 

     } 

     phantom.exit(); 
}); 
0

有人使用casperjs,也許你可以通過您的特定需求的代碼創建測試XML站點地圖測試套件。

從筆者:

該腳本將嘗試通過指定的網站地圖爬行檢查兒童頁損壞的網址,圖片,CSS和Javascript。錯誤將被記錄到指定的日誌文件中。

用法:

casperjs sitemap_xml_testing.js --sitemap=<URL TO SITEMAP> --logfile=<LOG FILE NAME> 

gmazin automated sitemap testing on Bitbucket