0

これが私がスクレイプする必要があるコードのサンプルブロックです:

<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

4

4 に答える 4

1

最新のブラウザでは、必要なすべてのリンクを簡単に取得できます。

var twitter_links = document.querySelectorAll('a[href*="twitter.com"]');

使用することは速度の点で少しペナルティがありますが、おそらく大きな違いに気付くことはなく、正規表現でループを.querySelectorAll()使用するよりもコードが読みやすく、短くなります。for

于 2012-08-29T13:42:55.703 に答える
0

link要素のプロパティを使用window.locationして、hrefのさまざまな部分を抽出できます。f.ex:

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

コードに関する別の問題:document.writeforループで使用すると、リンクのコレクションが事実上空になります。これは、リンクが現在のドキュメントに存在するリンクへの単なる参照であるためです。したがって、最初のリンクを通過することはありません。代わりに、それらを配列に収集します。

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/

于 2012-08-29T13:31:57.577 に答える
0

オリジナル:デモページで動作していません(サンプル6

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

改訂:デモページで作業中(サンプル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> 
于 2012-08-29T13:32:00.730 に答える
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です> http://jsfiddle.net/Pv8DH/

于 2012-08-29T13:34:19.153 に答える