2016-12-04 7 views
0

私はいくつかのウェブサイトをクロールしようとしています。しかし、私のクロールプロセスは非常に長く、私はそれを短縮するために複数のインスタンスを使用する必要があります。私は他の方法を探して、依然として私にとって遅すぎる(約8〜9秒)と要求される不必要なリソースをすべて中止しました。CasperJSと並列クロール

casperjsインスタンスを並列化するか、同時に2つのcasperjsを同時に実行して同時にクロールするのが最も簡単な方法は何ですか?

私はブログの投稿から並列gnuを使用しましたが、プロセスが生きているように見えますが、合計実行時間は1つのインスタンスで同じであるため、並列にクロールしていません。

nodejsサーバーを使用してインスタンスを作成する必要がありますか? 最も簡単で最も実用的な方法は何ですか?

+0

あなたは、サーバーの物理的または人為的な限界を打つかもしれないが。これを確認できますか? –

答えて

0

あなたはこの適応することができます: https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer

#!/bin/bash 

    # E.g. http://gatt.org.yeslab.org/ 
    URL=$1 
    # Stay inside the start dir 
    BASEURL=$(echo $URL | perl -pe 's:#.*::; s:(//.*/)[^/]*:$1:') 
    URLLIST=$(mktemp urllist.XXXX) 
    URLLIST2=$(mktemp urllist.XXXX) 
    SEEN=$(mktemp seen.XXXX) 

    # Spider to get the URLs 
    echo $URL >$URLLIST 
    cp $URLLIST $SEEN 

    while [ -s $URLLIST ] ; do 
    cat $URLLIST | 
     parallel lynx -listonly -image_links -dump {} \; \ 
     wget -qm -l1 -Q1 {} \; echo Spidered: {} \>\&2 | 
     perl -ne 's/#.*//; s/\s+\d+.\s(\S+)$/$1/ and do { $seen{$1}++ or print }' | 
     grep -F $BASEURL | 
     grep -v -x -F -f $SEEN | tee -a $SEEN > $URLLIST2 
    mv $URLLIST2 $URLLIST 
    done 

    rm -f $URLLIST $URLLIST2 $SEEN 
+0

お返事ありがとうございますが、私はそれを適応させることができません。なぜなら、私がクロールしているウェブページにはjavascriptが有効になっている必要があり、wgetやcurlでページの最初の部分しか取得できないからです。 – kck

+1

'lynx -listonly -image_links -dump URL'と 'wget -qm -l1 -Q1 URL'のようなページを取得できるツールのようなリンクをエクスポートできるツールを構築できますか?上のスクリプトのlynx/wgetこれは私が「適応する」という意味です。 –