CasperJS和并行爬行

时间:2016-12-04 00:09:49

标签: phantomjs casperjs gnu-parallel

我试图抓取一些网站。但是我的抓取过程太长了,我需要使用多个实例来缩短它。我已经搜索了其他方法并中止了所有不必要的资源,但对我来说这仍然太慢(大约8-9秒)。

并行casperjs实例的最简单方法是什么,甚至同时只运行两个casperjs并行爬行?

我在博客文章中使用过并行gnu但我发现它似乎虽然过程'他们没有并行爬行,因为一个实例的总执行时间仍然相同。

我应该使用nodejs服务器来创建实例吗? 什么是最简单,最实用的方式?

1 个答案:

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