Я использую 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 и вернуть пути ответов на эти изображения. Спасибо за помощь и советы!