繁体   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