1045
Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs
так-то это скорее всего 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 для реквест-колбэков паука?
Читать полностью…
scrapyd какой-то внешний чувак майнтейнит, и на днях что-то коммитил
Читать полностью…
I need LinkedIn cookie accounts. I need a lot of it every day. If you can provide it, please contact me. Scammers please stay away. Using cookies to log in does not require email access. The format is as follows.
email+linkedin pass+cookie+connects
or no pass
Всем Привет !
Пытаюсь запустить свой скрипт на scrapy по графику…
Я вижу логи о запуске но самого процесса сбора нету.
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2025-07-21 21:23:00.058 | INFO | scrapy.middleware:_from_settings:101 - Enabled spider middlewares:
['scrapy.spidermiddlewares.start.StartSpiderMiddleware',
'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2025-07-21 21:23:00.058 | INFO | scrapy.middleware:_from_settings:101 - Enabled item pipelines:
['pipelines.items.ItemPipeline']
2025-07-21 21:23:00.058 | INFO | apscheduler.executors.base:run_job:156 - Job "run_spiders (trigger: cron[month='*', day='*', day_of_week='*', hour='*', minute='*'], next run at: 2025-07-21 18:24:00 UTC)" executed successfully
Я испольузeю scrapy 3.13.3
эти логи повторяются но мой crawler не работает. Хотя логи повторяются верно (по интервалу)
Читать полностью…
from datetime import datetime
from twisted.internet import asyncioreactor
from loguru import logger
asyncioreactor.install()
from apscheduler.schedulers.twisted import TwistedScheduler
from apscheduler.executors.twisted import TwistedExecutor
from apscheduler.triggers.cron import CronTrigger
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from utils.log import setup_logger
from spiders.npauctions import NPAuctionsSpider
setup_logger()
@defer.inlineCallbacks
def run_spiders():
runner = CrawlerRunner()
logger.success("Running spiders sequentially...")
yield runner.crawl(NPAuctionsSpider)
runner.stop()
def main():
logger.info("Starting scheduler...")
# Configure the scheduler
scheduler = TwistedScheduler(
reactor=reactor,
executors={
'default': TwistedExecutor()
}
)
trigger = CronTrigger.from_crontab(
'* * * * *', # Daily at midnight
timezone='UTC'
)
scheduler.add_job(
run_spiders,
trigger=trigger,
max_instances=1,
coalesce=True,
id="npauctions",
next_run_time=datetime.now()
)
try:
# Start the scheduler
scheduler.start()
reactor.run()
except (KeyboardInterrupt, SystemExit):
logger.info("Shutting down scheduler")
scheduler.shutdown()
if __name__ == "__main__":
main()
всем привет, кто-нибудь пытался в интеграцию scrapy + langgraph?
Читать полностью…
оставлю, для справки, как (наверное) подобный код переводить на скрапи 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 внутри целая машинерия с раскруткой генераторов емнип
Читать полностью…
Ребят, есть ресурс example.com. Нужные мне списки со ссылками внутри грузят жквери. При загрузке, ресурс дёргает какой-то эндпоинт и получает x-knock параметры (я так понимаю, данные сессии).
Дальше хочу ходить по ссылкам с id из списков.(f"url?id={id}"). Без x-knock сыпется 401.
Не пойму, как мне поймать запрос с x-knock куками?
Хотел пройтись напрямую по апишке. Или в таких случаях лучше просто по ui'ю ходить?
scrapy-playwright
всем привет ребята
хочу узнать мнения, пользуетесь ли scrapyd, какой то альтернативой, или написали что то собственное? (не учитывая облачные решения)
просто интересно
заодно было бы интересно услышать мнения разработчиков scrapy насчет scrapyd. планируется ли добавлять какие либо в него фичи или вообще, наоборот, сделать его легаси?
Hi everyone, can anyone here extract the LinkedIn cookie account from the logs?
Читать полностью…
Всем привет!
Ищу специалистов по парсингу, которые в своей работе регулярно используют прокси-серверы.
Хочу провести короткое интервью (15–20 минут) за вознаграждение 💰
Интересует, как вы используете прокси, с какими задачами сталкиваетесь и что важно при выборе сервиса.
Если интересно - напишите, плиз, в ЛС, расскажу детали.