Scrapy: продолжить процесс с помощью функции разбора - PullRequest
0 голосов
/ 29 сентября 2018

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

Iпробовал файл конвейера но он просто не работает.URL на странице A выглядит как http: ... php? Id = 1234, поэтому встроенный file_path () возвращает ошибку.Переопределение file_path () просто останавливает конвейерную работу без каких-либо отладочных выходных данных.

Итак, я нашел этот пост:

Ответ, о котором я говорил

После того, как я применил Iобнаружил, что функция синтаксического анализа не изменит данные, которые я передал в мета.Мой код выглядит так:

def ParseClientCaseNote(self,response):
        # The function is to download all attachments and replace URL inside pointing to local files
        TestMeta='this is to test meta argu'
        for a in AttachmentList:
            yield scrapy.Request(a,callback=self.DownClientCaseNoteAttach,meta={'test':TestMeta})

        self.logger.info('ParseClientCaseNote: after call DownClientCaseNoteAttach, testmeta is: ' + TestMeta)

        return

def DownClientCaseNoteAttach(self,response):
        TestArg=response.meta['test']
        self.logger.info('DownClientCaseNoteAttach: test meta')
        self.logger.info(TestArg)
        TestArg='this is revised from DownClientCaseNoteAttach'

        with open(AbsPath,'wb') as f:
            f.write(response.body)
        return

Я получил ниже результат в журнале:

2018-09-29 09:26:13 [отладка] INFO: ParseClientCaseNote: после вызова DownClientCaseNoteAttach, testmeta: это тестирование мета-аргумента 2018-09-29 09:26:17 [debug] INFO: DownClientCaseNoteAttach: тестирование мета 2018-09-29 09:26:17 [debug] INFO: это тестирование мета-аргумента

Кажется, функция анализа отложена.Как правильно получить результат?

Спасибо

1 Ответ

0 голосов
/ 03 октября 2018

Я использовал обходной путь для решения этой проблемы.На странице AI получите имя файла в сети и передайте имя собственной функции загрузки, измените URL, указывающий на локальный файл с именем в сети.В функции загрузки я проверяю имя файла из response.headers ['Content-Disposition']. Decode (response.headers.encoding), чтобы убедиться, что оно совпадает с тем, которое я нахожу на странице A, прежде чем сохранить его.

...