Scrapy - 爬行蜘蛛的流动

时间:2015-06-30 13:11:10

标签: web-crawler scrapy

我很难弄清楚Scrapy是如何工作的(或者我需要如何使用它)。 这个问题有点宽泛 - 更多的是为了理解。

我设置了一个CrawlSpider并投入了6个开始网址 从那些(每个起始网址的24个项目)我预计大约144行最终在我的数据库中,但我现在只有18个。

所以我正在使用

def parse_start_url(self, response):

以避免现在的规则复杂化。 现在,Scrapy应该使用这6个URL并抓取它们,然后处理这些页面上的项目。 但相反,似乎需要这6个网址然后检查这些网页上的每个链接并首先跟踪这些链接 - 这可能吗?
Scrapy是否只使用URL 1,扫描所有链接并遵循允许的所有内容? 什么时候需要URL 2?

1 个答案:

答案 0 :(得分:3)

您可以在official documentation page找到答案,但为了完整起见,我会将其粘贴到此处:

  

默认情况下,Scrapy使用LIFO队列存储待处理的请求,   这基本上意味着它以DFO顺序爬行。这个订单更多   在大多数情况下方便。如果您确实想要以真正的BFO顺序进行爬网,   您可以通过设置以下设置来完成此操作:

mysql_query("   INSERT INTO tz_members(usr,pass,email,regIP,dt)
                        VALUES(

                            '".$_POST['username']."',
                            '".md5($pass)."',
                            '".$_POST['email']."',
                            '".$_SERVER['REMOTE_ADDR']."',
                            NOW()

                        )");

        if(mysql_affected_rows($link)==1)
        {
            send_mail(  'info@mydomain.com',
                        $_POST['admin'],
                        'Registration System-  - Your New Password',
                        'Your password is: '.$pass);


            $_SESSION['msg']['reg-success']='We will send you an email with your new password! (within 24 hrs)';
        }
        else $err[]='This username is already taken!';
    }

    if(count($err))
    {
        $_SESSION['msg']['reg-err'] = implode('<br />',$err);
    }   

    header("Location: demo.php");
    exit;
}

注意: 您描述抓取订单的方式通常称为DFS(深度优先搜索)或BFS(广度优先搜索)。 Scrapy使用DFO和BFO(&#39; O&#39;用于&#39;命令&#39;,但意思相同)。