Получить изображения с помощью scrapy в контейнере docker, загрузить в AWS - PullRequest
0 голосов
/ 23 февраля 2020

Я использую scrapy в docker контейнере . Получив запрос с URL-адресом, я хочу создать паука, который будет загружать все изображения с данного URL-адреса и загружать его в корзину AWS s3. Что бы я ни пытался, я получаю несколько ошибок, связанных с ошибками сигнала: ValueError: signal only works in main thread.

Здесь я хочу получить запрос вместе с URL для извлечения изображений из.

class Img(Resource):
    def get(self):
        # get url_path from args
        args = request.args
        url_path = args['url_path']
        print("all ok")
        # initiate retrieving images from given url

        runner = CrawlerRunner()

        d = runner.crawl(ImgSpider, start_url=url_path)
        d.addBoth(lambda _: reactor.stop())
        reactor.run()
        image_paths = None # yet to assign paths of img uploaded to aws

        return {'data': url_path, 'img_urls': image_paths }

items.py

class ScrapyImgItem(scrapy.Item):
    image_urls = scrapy.Field() 
    images = scrapy.Field()

моего паука в ImgSpider.py

class ImgSpider(scrapy.spiders.Spider):
    name = "img_spider"

    # initiate spider with start_url
    def __init__(self, *args, **kwargs):
      super(ImgSpider, self).__init__(*args, **kwargs)

      self.start_urls = [kwargs.get('start_url')]

    def parse(self, response):
        image = ScrapyImgItem()
        img_urls = []

        for img in response.css(".entry-featured-image-url img::attr(src)").extract():
            img_urls.append(img)

        image["image_urls"] = img_urls

        return image

и settings.py для приложения scrapy

ITEM_PIPELINES = {'scrapy.contrib.pipeline.images.ImagesPipeline': 1}

AWS_ACCESS_KEY_ID = "acces_key"
AWS_SECRET_ACCESS_KEY = "secret_acces_key/"

IMAGES_STORE = 's3://buckt-name/'

у меня есть следующие основные вопросы:

  • как правильно запустить паука с аргументом url_path?
  • как получить доступ к заполненным данным и вернуть их в ответ?

Как я уже упоминал выше, моя цель - получить изображения, загрузить их в AWS и вернуть пути ответов на эти изображения. Спасибо за помощь и советы!

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