Scrapy Crawler多个域在检索源页面后完成且没有错误

时间:2018-06-03 13:59:28

标签: python-3.x scrapy

尝试让Scrapy抓取多个域。我让它简单地工作,但有些事情发生了变化,我不知道是什么。我的理解是" CrawlSpider"有关要遵循哪些链接的规则应遵循任何允许的链接,直到深度设置或域耗尽。

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class BbcSpider(CrawlSpider):
    name = 'bbcnews'
    allowed_domains = [
        'www.bbc.com']

    start_urls = [
        'http://www.bbc.com/news']

    rules = (Rule(LinkExtractor(allow=()), callback='parse', follow=True),)

    def parse(self, response):
        print(response.url)

如果我想抓取多个域名,我会更改" allowed_domains"和" start_urls"

     allowed_domains = [
        'www.bbc.com',
        'www.voanews.com']

    start_urls = [
        'http://www.bbc.com/news',
        'https://www.voanews.com/p/6290.html']

然而,在我运行" scrapy crawl bbcnews"的两种情况下,爬虫只检索源站点然后退出。

编辑:

好的,只要只有1个域和1个起始URL,此代码就可以正常工作。如果我添加多个,蜘蛛只会抓取起始页。

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class BbcfarsiSpider(CrawlSpider):
    name = 'bbcfarsi'
    allowed_domains = ['bbc.com']
    start_urls = ['http://bbc.com/persian']
    rules = (Rule(LinkExtractor(allow=('persian'),), callback='parse', follow=True), )

def parse(self, response):
    pass

编辑#2: 如果我将解析函数移到课外,它没有问题。问题是我不能以那种方式输出任何东西。在类中使用parse函数(即使它只是填充了pass)导致只请求起始页和robot.txt

2 个答案:

答案 0 :(得分:0)

不确定为什么,但如果我将规则回调更改为callback ='parse_link'并重命名该函数以匹配,一切正常。代码看起来应该如下所示:

Couldn't find remote ref HEAD

编辑:请参阅下面的Chetan mishra的评论。我显然没有仔细查看文档。

答案 1 :(得分:0)

我想当你使用 callback ='parse'时,它会回退到内置的解析方法。 您可以尝试使用 callback ='self.parse'吗? 这可能会触发您的解析方法而不是默认方法