Как получить доступ к имени паука в settings.py в scrapy - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу сохранить все загружаемые изображения для обхода в определенной папке, чтобы я мог запускать несколько пауков в одном проекте одновременно, не имея все изображения нескольких обходов в одной папке.

Назначение папки img определяется в настройках:

project_dir = os.path.dirname(__file__)+'/../' #<-- absolute dir the script is in
IMAGES_STORE = project_dir+"images"

Мой паук имеет такой класс в spidername.py:

class GetbidSpider(CrawlSpider):
    name = 'test_spider'

Мой конвейер изображений выглядит так:

class MyImagesPipeline(ImagesPipeline):

    def get_media_requests(self, item, info):
        for image_url in item['image_urls']:
            yield scrapy.Request(image_url)

    def item_completed(self, results, item, info):
        image_paths = [x['path'] for ok, x in results if ok]
        if not image_paths:
            raise DropItem("Item contains no images")
        item['image_paths'] = image_paths
        return item

Как я могу получить доступ к имени текущего паука в настройках, чтобы создать папку для загрузки динамического изображения?

1 Ответ

0 голосов
/ 13 февраля 2019

Одним из способов было бы переопределить ImagesPipeline, более конкретным будет метод image_downloaded, чтобы вы могли делать с тем, что хотите, с тем, что получили от сканера.

Теперь, я полагаюВы хотите изменять эту переменную настроек каждый раз, когда вы запускаете паука, так что вам не нужно ходить вокруг и менять настройки каждый раз перед его запуском.

Альтернативой изменению настроек при каждом запуске будетчтобы передать его в качестве аргумента для сканирования:

scrapy crawl test_spider -s IMAGES_STORE=test_spider

Другой способ - установить custom_settings для каждого паука в вашем коде:

class GetbidSpider(CrawlSpider):
    name = 'test_spider'

    custom_settings = {
        'IMAGES_STORE': 'test_spider',
    }

и просто запустить своего паука в обычном режиме.:

scrapy crawl test_spider
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...