Один из веб-сайтов, над которым я работаю, часто использует —
в URL, и Scrapy преобразует его в —
перед обработкой;Я пытаюсь изменить его обратно на —
, добавив несколько строк по умолчанию. Загрузите промежуточное ПО, и оно печатает все нормально, однако Scrapy конвертирует его снова, что в итоге приводит к 404.
'DOWNLOADER_MIDDLEWARES' : {
'something.middlewares.MyDownloaderMiddleware': 540
}
middlewares.py.
from urllib.parse import unquote
from html import escape, unescape
class MyDownloaderMiddleware(object):
def process_request(self, request, spider):
new_url = unescape(unquote(request.url))
print (new_url)
request = request.replace(url=new_url)
return None
Я попытался return request
вместо return none
в промежуточном программном обеспечении, однако, похоже, он тоже не работает.
Решение:
У меня естьпоместил пару .replace("—", "—")
в коде паука, теперь он работает, хотя мой первый подход состоял в том, чтобы сделать это через промежуточное ПО, которое должно было быть более чистым.