Scrapy -如何解析多个start_url

juzqafwq  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(190)

我正在做我的第一个零碎的项目,从一个相当简单的网站stockx开始。
我想抓取不同类别的项目。如果我使用下面的URL作为我的start_url。我如何解析每个start_URL?
第一个字符串
产品页面的结构通常如下所示:
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)
vxqlmq5t

vxqlmq5t1#

试试这样-

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

lqfhib0f2#

简单的解决方案是使用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

d5vmydt9

d5vmydt93#

你可以使用列表解析来代替初始的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函数的时间。

我使用的网址***不存在***这只是一个例子,你可以做的事情。
这里的主要思想***是使用一个列表解析来代替默认的start_urls列表***,这样就不必创建一个花哨的函数。

相关问题