Mam kilka problemów, próbując zeskrobać te 2 konkretne strony i nie widzę, gdzie jest problem. Jeśli masz jakieś pomysły lub porady, ja jestem wszystkimi uszami! Z góry dziękuję !

import scrapy


class SneakersSpider(scrapy.Spider):
    name = "sneakers"
    
    def start_requests(self):
        headers = {'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
        urls = [ 
            #"https://stockx.com/fr-fr/retro-jordans",
            "https://stockx.com/fr-fr/retro-jordans?page=2",
            "https://stockx.com/fr-fr/retro-jordans?page=3",
            ]
        for url in urls:
            yield scrapy.Request(url = url, callback =self.parse ,headers = headers)
            
    def parse(self,response):
        page = response.url.split("=")[-1]
        filename = f'sneakers-{page}.html'
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log(f'Saved file {filename}')
            
            
            


0
Ishmael 21 październik 2020, 20:30

1 odpowiedź

Najlepsza odpowiedź

Patrząc na Traceback zawsze pomaga. Powinieneś zobaczyć coś takiego w wyjściu pająka:

Traceback (most recent call last):
  File "c:\program files\python37\lib\site-packages\scrapy\core\engine.py", line 127, in _next_request
    request = next(slot.start_requests)
  File "D:\Users\Ivan\Documents\Python\a.py", line 15, in start_requests
    yield scrapy.Request(url = url, callback =self.parse ,headers = headers)
  File "c:\program files\python37\lib\site-packages\scrapy\http\request\__init__.py", line 39, in __init__
    self.headers = Headers(headers or {}, encoding=encoding)
  File "c:\program files\python37\lib\site-packages\scrapy\http\headers.py", line 12, in __init__
    super(Headers, self).__init__(seq)
  File "c:\program files\python37\lib\site-packages\scrapy\utils\datatypes.py", line 193, in __init__
    self.update(seq)
  File "c:\program files\python37\lib\site-packages\scrapy\utils\datatypes.py", line 229, in update
    super(CaselessDict, self).update(iseq)
  File "c:\program files\python37\lib\site-packages\scrapy\utils\datatypes.py", line 228, in <genexpr>
    iseq = ((self.normkey(k), self.normvalue(v)) for k, v in seq)
ValueError: too many values to unpack (expected 2)

Jak widać, istnieje problem w kodzie, który obsługuje nagłówki żądania.

headers jest zestawem w swoim kodzie; zamiast tego powinien być dykt.
To działa bez problemu:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}

Innym sposobem ustawienia domyślnego agenta użytkownika dla wszystkich żądań jest korzystanie z USER_AGENT ustawienie.

0
stranac 21 październik 2020, 17:48