我试图抓取一些网站。但是我的抓取过程太长了,我需要使用多个实例来缩短它。我已经搜索了其他方法并中止了所有不必要的资源,但对我来说这仍然太慢(大约8-9秒)。
并行casperjs实例的最简单方法是什么,甚至同时只运行两个casperjs并行爬行?
我在博客文章中使用过并行gnu但我发现它似乎虽然过程'他们没有并行爬行,因为一个实例的总执行时间仍然相同。
我应该使用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