1

以下のタグから、サイト「 http://www.firstcry.com/teethers-and-soothers/5/98?ref2=menu_dd 」から製品の URL をスクレイピングしたい:

     <a href="http://www.firstcry.com/nuby/nuby-orthodontic-pacifier/140905/product-detail" id="ctl00_ContentPlaceHolder1_productdisplay_gvProductListDetails_ctl01_lnk_Image" onclick="jmp(this)">
                                <img id="ctl00_ContentPlaceHolder1_productdisplay_gvProductListDetails_ctl01_Img_view" title="Nuby - Orthodontic Pacifier" class="resizeimg" src="http://cdn.firstcry.com/brainbees/images/products/bigthumb/140905a.jpg" alt="Nuby - Orthodontic Pacifier" style="border-width:0px;border: none;vertical-align: middle;" original="http://cdn.firstcry.com/brainbees/images/products/bigthumb/140905a.jpg">

                                    </a>

私はこのようなことをしたい:

     return [].map.call(document.querySelectorAll('a)'), function(link) {
        return link.getAttribute('href');
    });

この要素にはクラス名がなく、ID もすべての製品で異なるため、これを行う方法がわかりません。可能であれば、ファントムで x-path を使用する方法もわかりません。

4

1 に答える 1

0

アンカーにクラス名と一意の ID がない場合でも、 href: にパターンがあります{site}/{brand}/{productname}/{productid}/product-detail

特に、一定の製品詳細は、製品の URL を選択するのに役立ちます。

一方、Web ページのコンテキストで -serialize- 要素を選択するには、 page.evaluate を使用する必要があります

ここに可能なスクリプトがあります

var page = require('webpage').create();
var url = 'http://www.firstcry.com/teethers-and-soothers/5/98?ref2=menu_dd';

page.open(url, function(status) {
    // list all the a.href links
    var alllinks = page.evaluate(function() {
        return [].map.call(document.querySelectorAll('a'), function(link) {
            return link.getAttribute('href');
        }).filter(function(link) {return (link?link:'').indexOf('product-detail')>-1;});
    });

    console.log(alllinks.join('\n'));
    phantom.exit();
});
于 2013-10-23T11:08:16.410 に答える