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 это работать не могло кажется
ну короче это никогда не декларировалось и не тестировалось
Читать полностью…
или как раз таки для составления блеклистов/вайтлистов, чтоб весь трафик через впн не гонять
Читать полностью…
ну, для условного фастапи не так много ресурсов на китайском
по крайней мере в поиске гх чтоб до чего то китайского дойти надо полисать, а для scrapy чуть ли не на первой странице много что на китайском/с переводом на китайский
в гитхабе просто очень много чего на китайском именно со 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, ошибок нет. Будет здорово, если почините.
Читать полностью…