2014-03-29 82 views
0

我正在解析與this頁面具有相似結構的網頁。在Scrapy中使用同一方法創建多個請求

我有以下兩個功能:

def parse_next(self, response): 
    # implementation goes here 
    # create Request(the_next_link, callback=parse_next) 
    # for link in discovered_links: 
    #  create Request(link, callback=parse_link) 


def parse_link(self, response): 
    pass 

我想parse_next()爲網頁上的* 下一頁鏈接創建請求。同時,我希望它通過使用parse_link()作爲回調來創建在當前頁面上發現的所有URL的請求。請注意,我希望parse_next遞歸地使用自己作爲回調,因爲這在我看來是唯一可能的方式來爲所有* 下一個鏈接生成請求。

* 下一頁:鏈接除了this頁面

上所有的數字出現我應該怎麼解決這個問題?

回答

1

使用通過 你的鏈接生成函數和循環,然後調用這個上要做出請求鏈接 :

for link in links: 
     yield Request(link.url) 

由於您使用scrapy,我假設你有鏈接提取器設置。 所以,只要申報你的鏈接提取作爲這樣一個變量:

link_extractor = SgmlLinkExtractor(allow=('.+')) 

然後在解析功能,呼籲「the_next_link」的鏈接提取:

links = self.link_extractor.extract_links(response) 

在這裏你去:

http://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained

+0

你是說''parse_next()'方法中應該有兩個yield語句嗎?像這樣:'yield Request(the_next_link,callback = parse_next)',另一個像這樣:'yield Request(link,callback = parse_link)'? – Rafay

+0

這可能有所幫助:http://blog.benoitblanchon.fr/scrapy-get-blog-articles –

+0

您將使用BaseSpider類而不是CrawlSpider –

相關問題