2015-10-14 26 views
1

我正在從事網頁抓取工作。目前我想要廢棄一個網站。我從robots.txt文件中獲得了xml文件鏈接。現在我想從該XML讀取所有網址。但不能做到這一點。任何人都可以幫我弄明白嗎?如何通過Node.js從xml中檢索URL?

XML格式:

<urlset> 
    <url> 
     <loc>http://www.xxxx.com/</loc> 
     <changefreq>test</changefreq> 
    </url> 
    <url> 
     <loc>http://www.xxxx.com/</loc> 
     <changefreq>test</changefreq> 
    </url> 
</urlset> 

這裏是我的代碼:

 var fs = require('fs') 
      , flow = require('xml-flow') 
      , inFile = fs.createReadStream(xml_file_url) 
      , xmlStream = flow(inFile) 
     ; 

     xmlStream.on('tag:urlset', function(err,url) { 
      if(err) 
       return console.log(err); 
      console.log(url); 
      res.send('Check your console!') 

     }); 

我希望所有從祿網址&推動他們的陣列上。我怎麼解決這個問題?提前致謝。

+0

的建議。如果您知道如何使用jQuery遍歷節點,請參閱https://github.com/cheeriojs/cheerio –

回答

1

您可以選擇標籤:LOC和每一個標籤推到數組:

var fs = require('fs'), 
    flow = require('xml-flow'), 
    http = require('http'); 

var file = fs.createWriteStream('site.xml'); 

http.get('http://ajkerdeal.com/sitemap.xml', function(res) { 
    res.on('data', function(data) { 
     file.write(data); 
    }).on('end', function() { 
     file.end(); 

     var inFile = fs.createReadStream("site.xml"), 
      xmlStream = flow(inFile); 

     var array = []; 
     xmlStream.on('tag:loc', function(url) { 
      array.push(url.$text); 
     }); 

     xmlStream.on('end', function(url) { 
      console.log(array); 

     }); 
    }) 
}) 
+0

我正在嘗試閱讀http://www.ajkerdeal.com/sitemap.xml文件。但我得到錯誤。 events.js:85 throw er; //未處理'錯誤'事件 ^ 錯誤:ENOENT,打開'http://www.ajkerdeal.com/sitemap.xml' at Error(native) –

+0

我更新了我的答案。您應該閱讀更多關於FS和創建流的信息。您只能將FS用於本地文件系統。我這種情況下,你需要從http下載文件,然後在本地處理 –