1045
Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs
Там грубо примерно в 10 раз больше население, в 10 раз больше (или в 100?) бизнесов и тп
Читать полностью…
Ну, как минимум, большая ориентированность на интернет технологии. Всякие магазины, социалки.
Это мое ИМХО
И кто сказал, что в других странах он не популярен?
оставлю, для справки, как (наверное) подобный код переводить на скрапи 2.13+:
async def parse(self, response):Читать полностью…
def in_thread():
self.logger.info("!!in_thread")
return "ok"
self.logger.info("!!begin")
result = await asyncio.to_thread(in_thread)
self.logger.info("!!result: %s", result)
self.logger.info("!!end")
ну или воткните return [] в свои но-оп колбэки, то же самое будет
Читать полностью…
не починим
ваш колбэк это по сути функция, возвращающая Deferred[None], и этот None попадает туда, где код скрапи ждёт итерейблы
вам придётся зарыться во внутренности в районе Scraper.call_spider() и iterate_spider_output(), найти что там попадало в 2.12 (обратите внимание что в 2.12 код дебажить практически невозможно, потому что цепочки колбэков), понять как сделать так же в мастере, и доказать нам что это багфикс
успехов!
если это работало после 2.0 то сразу надо было на async def писать
до 2.0 это работать не могло кажется
ну короче это никогда не декларировалось и не тестировалось
Читать полностью…
на 2.9 следовало использовать async def колбэки и не мучаться
Читать полностью…
С использованием инлайн колбэкс декоратора на коленке паука
Читать полностью…
в scrapy-inline-callbacks внутри целая машинерия с раскруткой генераторов емнип
Читать полностью…
в гитхабе просто очень много чего на китайском именно со scrapy
Читать полностью…
че, че - ну, не знает человек русского...
ты по китайски попробуй без ошибок написать :)
так-то это скорее всего iterate_spider_output() + дефереды, имеющийся сейчас там код мне не нравится
но это опять же последствия того что дефереды из колбэков нельзя было возвращать ни до ни после 2.0
я за полчаса не нашёл, а я этот код рефакторил в этом году
Читать полностью…
@wrar42, дополняю: почти работает inlineCallbacks на скрапи 2.13
from scrapy import Spider
from twisted.internet.defer import inlineCallbacks
from twisted.internet.threads import deferToThread
class TestSpider(Spider):
name = "test"
start_urls = ["data:,"]
custom_settings = {
"TWISTED_REACTOR": "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
}
@inlineCallbacks
def parse(self, response):
def in_thread():
self.logger.info("!!in_thread")
return "ok"
self.logger.info("!!begin")
result = yield deferToThread(in_thread)
self.logger.info("!!result: %s", result)
self.logger.info("!!end")
# return ()
Traceback (most recent call last):
File "[redacted]\site-packages\scrapy\utils\defer.py", line 343, in iter_errback
yield next(it)
~~~~^^^^
File "[redacted]\site-packages\scrapy\utils\python.py", line 369, in __next__
return next(self.data)
File "[redacted]\site-packages\scrapy\utils\python.py", line 369, in __next__
return next(self.data)
File "[redacted]\site-packages\scrapy\core\spidermw.py", line 167, in process_sync
yield from iterable
File "[redacted]\site-packages\scrapy\spidermiddlewares\base.py", line 58, in process_spider_output
for o in result:
^^^^^^
File "[redacted]\site-packages\scrapy\core\spidermw.py", line 167, in process_sync
yield from iterable
File "[redacted]\site-packages\scrapy\spidermiddlewares\base.py", line 58, in process_spider_output
for o in result:
^^^^^^
File "[redacted]\site-packages\scrapy\core\spidermw.py", line 167, in process_sync
yield from iterable
File "[redacted]\site-packages\scrapy\spidermiddlewares\base.py", line 58, in process_spider_output
for o in result:
^^^^^^
File "[redacted]\site-packages\scrapy\core\spidermw.py", line 167, in process_sync
yield from iterable
File "[redacted]\site-packages\scrapy\spidermiddlewares\depth.py", line 59, in process_spider_output
yield from super().process_spider_output(response, result, spider)
File "[redacted]\site-packages\scrapy\spidermiddlewares\base.py", line 58, in process_spider_output
for o in result:
^^^^^^
File "[redacted]\site-packages\scrapy\core\spidermw.py", line 167, in process_sync
yield from iterable
TypeError: 'NoneType' object is not iterable
iterable, ошибок нет. Будет здорово, если почините.
Читать полностью…
Обновил скрапи до последней - сломалось. На 2.9 раблтало
Читать полностью…
Раньше можно было, есть реализации. Деферед и сейчас можно
Читать полностью…
если б мы когда-то разрешали возвращать из колбэков дефереды, мир бы выглядел совсем иначе
Читать полностью…
@wrar42 я правильно понимаю, что на последнем scrapy больше нельзя использовать inlineCallbacks для реквест-колбэков паука?
Читать полностью…