1045
Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs
или как раз таки для составления блеклистов/вайтлистов, чтоб весь трафик через впн не гонять
Читать полностью…
ну, для условного фастапи не так много ресурсов на китайском
по крайней мере в поиске гх чтоб до чего то китайского дойти надо полисать, а для 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, ошибок нет. Будет здорово, если почините.
Читать полностью…
как будто vless и shadowsocks сделали китайцы, не уверен
Читать полностью…
Не забывай. Что в плане блокировка и обхода блокировка они чуть ли не в перешли планеты все 😁
Читать полностью…
я предполагаю что там популярны локальные аля «зеркала» забугорных сайтов, до которых без впн не дойти
Читать полностью…
Там грубо примерно в 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 это работать не могло кажется