Scrapy Spla sh Скриншот конвейера не работает - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь сохранить скриншоты очищенных веб-страниц с помощью Scrapy Spla sh. Я скопировал и вставил код, найденный здесь, в папку конвейера: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

Вот код из URL:

import scrapy
import hashlib
from urllib.parse import quote


class ScreenshotPipeline(object):
    """Pipeline that uses Splash to render screenshot of
    every Scrapy item."""

    SPLASH_URL = "http://localhost:8050/render.png?url={}"

    async def process_item(self, item, spider):
        encoded_item_url = quote(item["url"])
        screenshot_url = self.SPLASH_URL.format(encoded_item_url)
        request = scrapy.Request(screenshot_url)
        response = await spider.crawler.engine.download(request, spider)

        if response.status != 200:
            # Error happened, return item.
            return item

        # Save screenshot to file, filename will be hash of url.
        url = item["url"]
        url_hash = hashlib.md5(url.encode("utf8")).hexdigest()
        filename = "{}.png".format(url_hash)
        with open(filename, "wb") as f:
            f.write(response.body)

        # Store filename in item.
        item["screenshot_filename"] = filename
        return item

Я также следовал инструкциям по настройке spla sh, найденным здесь: https://github.com/scrapy-plugins/scrapy-splash

Когда я вызываю команду scrapy crawl spider, все работает правильно, кроме конвейера. Это «ошибка», которую я вижу.

<coroutine object ScreenshotPipeline.process_item at 0x7f29a9c7c8c0>

Паук дает предмет правильно, но не будет обрабатывать предмет.

У кого-нибудь есть совет? Спасибо.

Редактировать:

Я думаю, что происходит то, что Scrapy вызывает метод process_item (), как обычно. Однако согласно этим документам: https://docs.python.org/3/library/asyncio-task.html объект сопрограммы должен вызываться по-разному.

asyncio.run (process_item ()), а не process_item (). Я думаю, что мне, возможно, придется изменить исходный код?

...