使用javascript从页面中抓取某些链接

时间:2012-08-29 13:28:59

标签: javascript unique scrape

以下是我需要抓取的示例代码块:

<p>This paragraph contains <a href="http://twitter.com/chsweb" data-placement="below" rel="twipsy" target="_blank" data-original-title="Twitter">links to Twitter folks</a>, and <a href="http://twitter.com/blogcycle" data-placement="below" rel="twipsy" target="_blank" data-original-title="Twitter">more links to other Twitter folks</a>, but it also contains <a href="http://www.someOtherWebsiteHere.com">non-Twitter links too</a>.  How can I list only the Twitter links below?</p>

此脚本会生成页面上每个网址的列表:

<script>
var allLinks = document.links;
for (var i=0; i<allLinks.length; i++) {
  document.write(allLinks[i].href+"<BR/>");
}
</script>

如何修改脚本以便它只列出包含某个域的URL,例如; twitter.com /?

这是一个演示页面: http://chsweb.me/OucTum

4 个答案:

答案 0 :(得分:1)

在现代浏览器上,您可以使用

轻松检索所有需要的链接
var twitter_links = document.querySelectorAll('a[href*="twitter.com"]');

使用.querySelectorAll()在速度方面有点不利,但可能你不会注意到任何有意义的差异,它会使代码更容易阅读,并且比使用常规的for循环更短表达

答案 1 :(得分:0)

您可以在link元素上使用window.location属性来提取href的不同部分。 f.ex:

var link = allLinks[i];
if ( /twitter\.com/.test( link.hostname ) ) {
    document.write(link.href+"<BR/>");
}

您的代码的另一个问题:如果您在for循环中使用document.write,它将有效地清空链接集合,因为它们只是对当前文档中存在的链接的引用。所以永远不会超越第一个链接。将它们收集在一个数组中:

var links = [];
for (var i=0; i<allLinks.length; i++) {
    var link = allLinks[i];
    if ( /twitter\.com/.test( link.hostname ) ) {
        links.push(link.href);
    }
}

document.write(links.join('<br>'));

演示http://jsfiddle.net/3xub6/

答案 2 :(得分:0)

ORIGINAL:不在演示页面上工作(Sample 6

<script>
if (allLinks[i].href.match("twitter\.com"))
{
     document.write(allLinks[i].href+"<BR/>");
}
</script>

已修订:正在制作演示页(Sample 7

<script>
var allLinks = document.links;
for (var i=0; i<allLinks.length; i++) {
      if (allLinks[i].href.match("twitter.com")) {
            document.write(allLinks[i].href+"<BR/>");
      }
}
</script> 

答案 3 :(得分:0)

以下内容将把所有Twitter链接放在twitter_links数组中:

var twitter_links = [ ],
    links = document.getElementsByTagName('a');
for(var i in links)
{
    if(/twitter.com/i.exec(links[i].href))
    {
        twitter_links.push(links[i]);
    }
}

这是给你的jsFiddle&gt; http://jsfiddle.net/Pv8DH/