Scrapy不会抓取LinkExtractor允许的页面

时间:2016-07-01 12:44:17

标签: scrapy

我很困惑,无法弄清楚为什么我的CrawlSpider无法在HTML代码中拾取和处理相关链接。

下面是一个cawlspider,我可以从命令行传递一些参数,如下所示:

scrapy crawl domain_spider -a url="https://djangosnippets.org/snippets/?page=15" -s ROBOTSTXT_OBEY=0 -s AUTOTHROTTLE_ENABLED=0

蜘蛛运行并绝对拒绝抓取列表中的分页页面。 HTML看起来像这样:

 <a href="?page=5">&lt; Previous 20</a>

如果我从-a allowed="page="这样的commans中传入params,那么它会再拾取两页,但它仍然拒绝继续。

有人能在我的代码中发现问题吗?

我的CrawlSpider

def __init__(self, url=None, category='default', allowed=None, denied=None, single_page=False, **kwargs):

    self.category = category

    if allowed == '':
        allowed = None

    if denied == '':
        denied = None

    if single_page is not False and single_page != '':
        denied = '.*'

    self.start_urls = ['{}'.format(url)]
    self.allowed_domains = [urlparse(url).netloc]
    self.domain = urlparse(url).netloc
    self.rules = (
        Rule( LinkExtractor(allow=allowed, deny=denied, unique=True), callback='parse_page' ),
    )

    super(DomainSpider, self).__init__(**kwargs)

1 个答案:

答案 0 :(得分:0)

好的,所以我很高兴能够为自己这么快回答这个问题。

如果将CrawlSpider与规则一起使用并定义回调(就像我一样),那么如果希望它继续使用蜘蛛页面,则必须将follow=True添加到规则中。否则,您将需要来自回调的yield个请求。因此,下面是修复的前/后,这将使CrawlSpider跟随链接。

<强>之前

Rule(
    LinkExtractor(allow=allowed, deny=denied, unique=True), 
    callback='parse_page'
),

<强>后

Rule( 
    LinkExtractor(allow=allowed, deny=denied, unique=True), 
    callback='parse_page', 
    follow=True
),