Почему не выполняется класс библиотеки Python Scrapy

Я пытаюсь использовать Scrapy в облаке IBM как функцию. Мой __main__.py выглядит следующим образом:

import scrapy
from scrapy.crawler import CrawlerProcess

class AutoscoutListSpider(scrapy.Spider):
    name = "vehicles list"

    def __init__(self, params, *args, **kwargs):
        super(AutoscoutListSpider, self).__init__(*args, **kwargs)
        make = params.get("make", None)
        model = params.get("model", None)
        mileage = params.get("mileage", None)

        init_url = "https://www.autoscout24.be/nl/resultaten?sort=standard&desc=0&ustate=N%2CU&size=20&page=1&cy=B&mmvmd0={0}&mmvmk0={1}&kmto={2}&atype=C&".format(
            model, make, mileage)
        self.start_urls = [init_url]

    def parse(self, response):
        # Get total result on list load
        init_total_results = int(response.css('.cl-filters-summary-counter::text').extract_first().replace('.', ''))
        if init_total_results > 400:
            yield {"message": "There are MORE then 400 results"}
        else:
            yield {"message": "There are LESS then 400 results"}


def main(params):
    process = CrawlerProcess()
    try:
        process.crawl(AutoscoutListSpider, params)
        process.start()
        return {"Success ": "The crawler (make: {0}, model: {1}, mileage: {2}) is successfully executed.".format(
            params['make'], params['model'], params['mileage'])}
    except Exception as e:
        return {"Error ": e, "params ": params}

Весь процесс добавления этой функции выглядит следующим образом:

  1. zip -r ascrawler.zip __main__.py common.py // Таким образом, я создаю zip-файл для его загрузки. (Существует также файл common.py. Я удалил его отсюда для простоты.)
  2. ibmcloud wsk action create ascrawler --kind python:3 ascrawler.zip // Создаем функцию и добавляем в облако
  3. ibmcloud wsk action invoke --blocking --result ascrawler --param make 9 --param model 1624 --param mileage 2500 // Вызываем функцию с параметрами

После выполнения третьего шага я получаю следующие результаты:

{"Success ": "The crawler (make: 9, model: 1624, mileage: 2500) is successfully executed."}

Таким образом, я не получаю никаких ошибок, но это вообще не относится к классу AutoscoutListSpider. Почему?

Он должен также вернуться {"message": "There are MORE then 400 results"}. Любая идея?

Когда я запускаю его с консоли Python следующим образом:

main({"make":"9", "model":"1624", "mileage":"2500"})

Возвращает правильный результат:

{"message": "There are MORE then 400 results"}
{"Success ": "The crawler (make: 9, model: 1624, mileage: 2500) is successfully executed."}

person Boky    schedule 28.06.2018    source источник
comment
Спасибо за подробное описание, я посмотрю на это завтра.   -  person James Thomas    schedule 28.06.2018
comment
@JamesThomas Хорошо. Спасибо   -  person Boky    schedule 29.06.2018
comment
Хорошие новости, все работает! Эта информация записывается в журналы консоли, а не возвращается из функции.   -  person James Thomas    schedule 29.06.2018


Ответы (1)


{"message": "There are MORE then 400 results"} доступен в журналах активации для вызова, а не результата действия.

После выполнения команды ibmcloud wsk action invoke получите идентификатор активации для предыдущего вызова.

$ ibmcloud wsk activation list
activations
d13bd19b196d420dbbd19b196dc20d59 ascrawler
...

Затем этот идентификатор активации можно использовать для получения всех журналов консоли из stdout и stderr, записанных во время вызова.

$ ibmcloud wsk activation logs d13bd19b196d420dbbd19b196dc20d59 | grep LESS
2018-06-29T08:27:11.094873294Z stderr: {'message': 'There are LESS then 400 results'}
person James Thomas    schedule 29.06.2018
comment
Есть идеи, почему это не работает zip -r ascrawler.zip venv/bin/activate_this.py venv/lib/python3.6/site-packages/raven venv/lib/python3.6/site-packages/raven-6.9.0.dist-info __main__.py common.py db.py? Я хочу использовать raven для захвата ошибок, и мне понравилось в вашем руководстве, но я получаю сообщение об ошибке "error": "The action did not return a dictionary.". И в логах .....<module>", "2018-07-04T12:55:56.590718898Z stderr: from raven import Client", "2018-07-04T12:55:56.590724452Z stderr: ModuleNotFoundError: No module named 'raven'" - person Boky; 04.07.2018