2016-07-01 168 views
0

我很困難,無法弄清楚爲什麼我的CrawlSpider無法拾取並處理HTML代碼中的相關鏈接。Scrapy不抓取LinkExtractor允許的頁面

下面是我可以通過一些PARAMS在命令行中,像這樣一個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> 

如果我在PARAMS傳球像-a allowed="page="的commans那麼它將皮卡兩個頁面,但它仍然拒絕繼續。

任何人都可以在我的代碼下面發現問題?

我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) 

回答

0

OK,所以我很高興我能如此迅速地回答這個自己。

如果在規則中使用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 
),