2017-07-31 79 views
0
class PractiseSpider(scrapy.Spider): 
    name = "practise" 
    allowed_domains = ["practise.com"] 
    start_urls = ['https://practise.com/product/{}/'] 
    def parse(self, response): 
     #do something 
     #scrape with next url in the list 

我的目錄m採取的url包含需要像product/{}/.format(m[i]) 反覆添加的URL。 我該怎麼做。我應該爲每個Url創建新的蜘蛛調用,還是應該爲蜘蛛編寫一些代碼來自動迭代列表。如果答案是後者,我該寫什麼?刮使用Scrapy使用從列表

我知道有很多與此相關的答案,例如, this但我有一個固定的和已知的網址列表。

回答

1

如果您事先知道網址,只需填寫start_urls即可。如果你說m是產品列表(這就是我想從你寫的),那麼就應該是這樣的:

start_urls = ['https://practise.com/product/{}/'.format(product) for product in m] 
+0

OK,然後怎麼辦遍歷start_urls – twitu

+0

名單@twitu您不需要,Scrapy會爲您處理它 - 它會從'start_urls'中抓取所有網址,並用響應調用您的'parse'方法。 –

2

或者壓倒一切start_urls,您可以覆蓋你的蜘蛛start_requests()方法。這種方法會產生從蜘蛛開始的請求。

默認情況下,您的蜘蛛做到這一點:

def start_requests(self): 
    for url in self.start_urls: 
     yield Request(url, dont_filter=True) 

,所以你可以在你的蜘蛛修改這個方法來任何你想:

def start_requests(self): 
    ids = pop_ids_from_db() 
    for id in ids: 
     url = f'http://example.com/product/{id}' 
     yield Request(url, dont_filter=True)