2012-06-25 128 views
0

,因爲我們看到:scrapy如何抓取更多網址?

def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    sites = hxs.select('//ul/li') 
    items = [] 

    for site in sites: 
     item = Website() 
     item['name'] = site.select('a/text()').extract() 
     item['url'] = site.select('//a[contains(@href, "http")]/@href').extract() 
     item['description'] = site.select('text()').extract() 
     items.append(item) 

    return items 

scrapy只是得到一個頁面響應,並找到在頁面響應的URL。我認爲這只是一個表面爬行!

但我想要更多的定義深度的網址。

我能做些什麼來實現它?

謝謝!

回答

1

我不明白你的問題,但我注意到在你的代碼的幾個問題,其中一些可能與你的問題(參見代碼中的註釋):

sites = hxs.select('//ul/li') 
items = [] 

for site in sites: 
    item = Website() 
    # this extracts a list, so i guess .extract()[0] is expected 
    item['name'] = site.select('a/text()').extract() 
    # '//a[...]' maybe you expect that this gets the links within the `site`, but it actually get the links from the entire page; you should use './/a[...]'. 
    # And, again, this returns a list, not a single url. 
    item['url'] = site.select('//a[contains(@href, "http")]/@href').extract() 
0

可以抓取更多網頁通過使用可從scrapy.contrib.spiders導入的CrawlSpider,並定義您的rules,以確定您的抓取工具要抓取哪種類型的鏈接。

按照有關如何定義規則

順便說音符here,考慮改變函數名,從文檔:

警告

當寫爬行蜘蛛的規則,避免使用解析作爲回調函數,因爲CrawlSpider使用解析方法本身來實現其邏輯。 因此,如果您重寫解析方法,抓取蜘蛛將不再工作 。