簡體   English   中英

Scrapy - 如何解析多個 start_urls

[英]Scrapy - how to parse multiple start_urls

我正在研究我的第一個 scrapy 項目,並從一個相當簡單的網站 stockx 開始。

我想抓取不同類別的物品。 如果我使用以下 URL 作為我的 start_urls。 如何解析每個啟動 URL?

https://stockx.com/sneakers ', https://stockx.com/streetwear ', https://stockx.com/collectibles ', https://stockx.com/handbags ', https://stockx. com/手表

產品頁面的結構通常如下:

https://stockx.com/air-max-90-patta-homegrown-grass

我正在嘗試通讀有關此主題的文檔,但無法完全理解。

我知道下面的內容不正確,因為我強制列出結果 URL,只是不確定在第一次解析中應該如何處理多個 start_url。

   def parse(self, response):

        #obtain number of pages per product category 
        text = list(map(lambda x: x.split('='), 
    response.xpath('//a[@class="PagingButton__PaginationButton-sc-1o2t560- 
    0 eZnUxt"]/@href').extract()))
    total_pages = int(text[-1][-1])
    #compile a list of URLs for each result page 
    cat =['sneakers','streetwear','collectibles','handbags','watches']   
    cat = ['https://stockx.com/{}'.format(x) for x in cat]

    lst=[]

    for x in cat:
        for y in range (1,total_pages+1):
            result_urls=lst.append(x+'?page={}'.format(y))

    for url in result_urls[7:9]:
    # print('Lets try: ', url)
        yield Request(url=url, callback=self.parse_results)

嘗試這樣的事情 -

class ctSpider(Spider):
name = "stack"
    def start_requests(self):
        for d in [URLS]:
            yield Request(d,callback=self.parse)
...

簡單的解決方案是使用start_urlshttps://doc.scrapy.org/en/1.4/topics/spiders.html#scrapy.spiders.Spider.start_urls

class MLBoddsSpider(BaseSpider):
   name = "stockx.com"
   allowed_domains = ["stockx.com"]
   start_urls = [
       "https://stockx.com/watches",
       "https://stockx.com/collectibles",

   ]

   def parse(self, response):
         ................
         ........

你甚至可以控制start_requests

您可以使用列表推導代替初始 start_urls 列表。 例如...

class myScraper(scrapy.Spider):
  name = 'movies'  
  abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
  url= "amazon.com/movies/{x}"
  start_urls = [url.format(x) for x in abc]

注意:請不要運行這個,這只是為了靈感。 不久前,我在一個項目中做了類似的事情(並且懶得再看一遍)並且它起作用了。 它為您節省了創建自定義 start_requests function 的時間。

我使用的 url不存在,它只是您可以做的事情的一個例子。

這里的主要思想是使用列表推導代替默認的 start_urls 列表,這樣您就不必制作花哨的 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM