【问题标题】:Scrape certain links from a page with javascript使用 javascript 从页面中抓取某些链接
【发布时间】:2012-08-29 13:28:59
【问题描述】:

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

<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>

此脚本生成页面上每个 URL 的列表:

<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

【问题讨论】:

  • 当你循环 DOM 节点集合时,当心document.write,循环永远不会越过第一个节点。

标签: javascript unique scrape


【解决方案1】:

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

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

使用.querySelectorAll() 在速度方面有点不利,但您可能不会注意到任何显着差异,并且与使用带有正则表达式的for 循环相比,它会使代码更易于阅读且更短。

【讨论】:

  • 效果很好!这是工作演示:chsweb.me/NCeU6L 谢谢 Fabrizio。
  • 另外,作为后续,我仅在本地使用它来组织对我所做的演示文稿发表评论的 Twitter 人员的链接。我用它来感谢他们并送礼物;这不是一个现实生活中的用例,但如果需要,它可以完成。
【解决方案2】:

以下会将所有 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 > http://jsfiddle.net/Pv8DH/

【讨论】:

  • 确认可以工作 - 将链接放入警报中,如果需要,可以在其中复制它们。谢谢。
【解决方案3】:

您可以在链接元素上使用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/

【讨论】:

  • 好的,确认,这也有效。谢谢! SO上有很多类似的帖子,我希望这对那些人也有帮助。 chsweb.me/O2Wtd8
【解决方案4】:

原文:无法在演示页面上运行 (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> 

【讨论】:

  • 嗯,好像不行,这里有一个演示页面,使用上面的脚本供参考:chsweb.me/PO2v4o
  • 用它制作一个 jsfiddler,而不是尝试从 Dropbox 托管它。
  • 这里是你的另一种方法,它在演示页面上有效,这里:chsweb.me/NWHuWi
猜你喜欢
  • 2019-03-23
  • 2023-01-04
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多