scrapy_python | Unsorted

Telegram-канал scrapy_python - Scrapy

1016

Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs

Subscribe to a channel

Scrapy

странный js попадается, но я его регуляркой чищу и через chompjs прогоняю
в нём например вместо запятых в некоторых местах слеш, внутри строчек неэкранированные кавычки
тут регулярки тема

Читать полностью…

Scrapy

Видимо ломаных респонсов вам не попадалось

Читать полностью…

Scrapy

Рекурсией парсить словарь, она идеальна для таких задач

Читать полностью…

Scrapy

пока 7 нашёл, надеюсь больше не будет)
а так да, проще выходит просто по словарю как по дереву ходить
всем спасибо!

Читать полностью…

Scrapy

ну и всегда можно json.loads() и под конкретный случай написать обход конечно

Читать полностью…

Scrapy

не думаю что такое возможно

Читать полностью…

Scrapy

jmespath.search('*.*.c', data)

Читать полностью…

Scrapy

Hello!

We have an excellent opportunity — we’re opening enrollment for our exclusive team. We work with proven, private strategies that yield up to 4% profit daily.

If you’re interested, send me a message saying “I’m in,” and I’ll share all the details with you.

Читать полностью…

Scrapy

спасибо, буду пробовать)

Читать полностью…

Scrapy

а чем https://github.com/TeamHG-Memex/scrapy-rotating-proxies/tree/master не подошел

Читать полностью…

Scrapy

Ищу тех, кто хочет зарабатывать на криптовалюте.

Занятость до двух часов в день.
Работать можно с телефона или компьютера.
Обучение доступно для новичков.
Сфера: аирдропы, тестнеты, лаунчпады и прочее.

Для подробностей пишите в личку.

Читать полностью…

Scrapy

всем привет
как думаете, нормальной практикой будет держать одного паука всегда запущеным, передавая ему ссылки для парсинга через редис/альтернативу?
в планах реализовать чекер наличия итемов перед чекаутом, хочу чтоб время ответа было минимальным

есть scrapyrt, держит ли он паука все время запущенным хз, если знаете- подскажите, пожалуйста)

Читать полностью…

Scrapy

Привет! Как можно запустить паука внутри цикла while?


from scrapy.crawler import CrawlerProcess
from crawler.spiders.google import GoogleSpider
from scrapy.utils.project import get_project_settings
import time

if __name__ == '__main__':
while True:
process = CrawlerProcess(settings=get_project_settings())
process.crawl(GoogleSpider)
process.start()
time.sleep(5)



После первого запуска:


raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable

Читать полностью…

Scrapy

Я его ужа убирал и запускал без него, скорость та же самая
Основная нагрузка судя по профилированию, идет в parse_seller_page функции

Читать полностью…

Scrapy

мое тупое вангование из опыта - если 100 за 1 секунду в лимитере выходит в итоге где-то в 50-70 запросов в секунду на один сервак, то сервак, если не тупой, тебе возможно такой латенс заряжает, что смысла там параллелить как-то и нет особо.

Читать полностью…

Scrapy

парсинг ломаных строгих форматов это дорога в ад и есть

Читать полностью…

Scrapy

вообще парсить регуляркой html или js/json звучит как дорога в ад)

Читать полностью…

Scrapy

рекурсия (но это не про jmespath)

Читать полностью…

Scrapy

А известна максимальная вложенность? А то мб подобие такого прокатит:

find_str = "*.c"
while True:
jmespath.search(find_str, data)
find_str = "*." + find_str

Читать полностью…

Scrapy

js2xml + xpath, угу
может конкуренты jmespath умеют, не силён (не удивлюсь если нет)
jq наверняка сумеет, но через разворачивание ключей в вектор и прочую байду

Читать полностью…

Scrapy

а еще не гарантии что до этого ключа еще два родителя, может их три или семь…

Читать полностью…

Scrapy

всем привет!
можете подсказать, возможно ли как нибудь с помощью jmespath дойти до определённого ключа? типа есть {'a': {'b':{'c':'d'}}}, хочу дойти до 'c', при этом не указывая 'a.b', потому что нет гарантии что ключи в джсоне который я паршу не будут меняться

Читать полностью…

Scrapy

кстати, там же, в ПР'ках есть обработка через сигналы, то же добавление/уделение проксей.
я у себя это делал, вроде, норм, работало...

Читать полностью…

Scrapy

в мидлварях доступен спайдер

Читать полностью…

Scrapy

Всем добрый вечер!

Подскажите пожалуйста, можно ли сделать объект proxy_rotator доступным как в Spider, так и в Middleware прикрепив его к объекту crawler или есть ещё какие-то способы? Спасибо!


class SiteOrgSpider(scrapy.Spider):
name = 'siteorg_spider'

@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(SiteOrgSpider, cls).from_crawler(crawler, *args, **kwargs)
crawler.signals.connect(spider.spider_closed, signal=signals.spider_closed)
# Инициализируем ProxyRotator и сохраняем в crawler
crawler.proxy_rotator = ProxyRotator()
return spider



class ProxyErrorHandlingMiddleware:
@classmethod
def from_crawler(cls, crawler):
middleware = cls()
middleware.proxy_rotator = crawler.proxy_rotator
return middleware

def process_exception(self, request, exception, spider):
proxy = request.meta.get('proxy')
if proxy:
self.proxy_rotator.remove_proxy(proxy)
spider.logger.warning(f"Removed non-working proxy: {proxy}")
# Дополнительная логика обработки исключений

Читать полностью…

Scrapy

scrapyrt запускает нового паука каждый раз

Читать полностью…

Scrapy

Вот так у меня сработало. Спасибо


from twisted.internet import reactor
from twisted.internet.task import LoopingCall
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from crawler.spiders.google import GoogleSpider


configure_logging({"LOG_FORMAT": "%(levelname)s: %(message)s"})
runner = CrawlerRunner()

def start_crawl():
runner.crawl(GoogleSpider).addBoth(lambda _: None)

if __name__ == '__main__':
looping_call = LoopingCall(start_crawl)
looping_call.start(1.0)
reactor.run()

Читать полностью…

Scrapy

Scalene я как раз использовал и parse_seller_page там занимает 80 процентов времени и памяти
из-за постоянных переходов на ссылки лотов и парсинга html

Читать полностью…

Scrapy

и со стейтом вот ты в итоге постоянно работаешь, может он там палки в колеса вставляет

Читать полностью…

Scrapy

чатжопоте вот сказал asynccoverage Pyinstrument, yappi,Scalene, дерзай:

Для твоих целей я бы рекомендовал использовать Py-Spy в комбинации с async-profiler или Scalene, так как они хорошо показывают асинхронные процессы и тайминги выполнения, включая сетевые запросы.

Из них, Scalene может быть особенно полезным для визуализации работы с асинхронностью и сетевым IO, так как он дает детализированные отчеты с графиками, включая информацию о времени CPU, времени ожидания IO, а также уровне параллелизма запросов.

Если тебе важны графики для сетевых запросов, Scalene может предоставлять как текстовые, так и графические отчеты, которые помогут отследить начало и окончание сетевых запросов и проанализировать, сколько из них выполняется параллельно.

Для более визуального анализа также можно рассмотреть Flamegraphs (например, с помощью Py-Spy), которые дают обзор потоков исполнения, включая асинхронные задачи, показывая где возникают "узкие места".

Читать полностью…
Subscribe to a channel