使用phantomjs抓取站点地图
Using phantomjs to crawl a sitemap
我对phantomjs很陌生。我花了很长时间来处理以下问题。我知道我错过了一些很简单的东西。我有以下sitemap.xml:
<?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,这样我就可以看到它的全部荣耀的对象?例如,如果我在Dev Tools中console.log一个对象,我可以展开它并看到键值对。我猜终点站不会提供这种奢侈吧?
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();
});
使用libxmljs解析xml字符串并获得您想要的数据!
另一个想法是,您可以将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');
});
}
});
有人创建了一个使用casperjs测试XML Sitemaps的测试套件,也许您可以根据您的特定需求采用该代码。
来自作者:
此脚本将尝试在指定的站点地图中爬行,以检查子页面中是否有损坏的url,图像,css和Javascript。错误将被记录到指定的日志文件中。
用法:
casperjs sitemap_xml_testing.js --sitemap=<URL TO SITEMAP> --logfile=<LOG FILE NAME>
gmazin在Bitbucket上的自动站点地图测试
相关文章:
- 谷歌地图固定位置覆盖
- 不显示带有本地json文件数据的谷歌地图脚本
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 谷歌地图标记不会显示
- 无法在JS中显示谷歌地图
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 如何从站点地图生成器中排除网址
- 弹出窗口JavaScript的站点地图生成器
- 如何使用javascript创建站点地图
- 将xml站点地图转换为可用链接的JavaScript
- 如何在angularjs应用程序中添加站点地图.xml
- 在 jsp 站点上创建动态课程地图
- 如何在Express JS中构建站点地图
- 弹出子菜单.站点地图和中继器
- 如何创建包含导航菜单链接的站点地图
- 在nodejs/表达如何允许站点地图的爬虫
- 站点地图在页脚CSS对齐/浮动li元素
- 直到服务器在流星中重新启动才创建站点地图
- 创建一个meteor.js站点地图
- 使用phantomjs抓取站点地图