Scrapy - как разобрать несколько start_urls - PullRequest
0 голосов
/ 09 октября 2019

Я работаю над своим первым проектом 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/watches

Страница продукта обычно имеет следующую структуру:

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

Я пытаюсь прочитать документацию по этой теме, но не могу точно следовать ей.

Я знаю, что нижеприведенное неверно, потому что я заставляю список URL-адресов результатов,просто не уверен, как должны обрабатываться несколько start_urls в первом разборе.

   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)

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Попробуйте что-то вроде этого -

class ctSpider(Spider):
name = "stack"
    def start_requests(self):
        for d in [URLS]:
            yield Request(d,callback=self.parse)
...
0 голосов
/ 09 октября 2019

Простое решение - использование start_urls: https://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.

...