Size: a a a

2020 November 29

AL

Alexey Lemeshevski in Scrapy
Я просто думаю, как лучше сделать... я поставил Frontera, подключил ее очередь, разобрался с kafka и бэкендами Frontera. Сервер, где это все крутится имеет 1гбит/с канал. Т.е. параллельно можно где-то до 2к страниц тянуть (наверное ...я раньше только на 100мбит/с ограничения сети тестировал). Производительность  Scrapy, если собирать только ссылки - около 30 страниц в секунду. С моей логикой выдерки данных производительность падает до 4-7 страниц в секунду.

Мне нужно выбрать один из вариантов:
а) или запустить несколько штук scrapy (там 8 или 16 ядер, значит 8/16 scrapy)
б) или научить scrapy использовать thread'ы
в) или сразу вынести обработку наружу и потом ее на других серверах делать


Сама задача - обход десятков тысяч сайтов, broad crawl.
источник

МС

Михаил Синегубов... in Scrapy
Alexey Lemeshevski
Я просто думаю, как лучше сделать... я поставил Frontera, подключил ее очередь, разобрался с kafka и бэкендами Frontera. Сервер, где это все крутится имеет 1гбит/с канал. Т.е. параллельно можно где-то до 2к страниц тянуть (наверное ...я раньше только на 100мбит/с ограничения сети тестировал). Производительность  Scrapy, если собирать только ссылки - около 30 страниц в секунду. С моей логикой выдерки данных производительность падает до 4-7 страниц в секунду.

Мне нужно выбрать один из вариантов:
а) или запустить несколько штук scrapy (там 8 или 16 ядер, значит 8/16 scrapy)
б) или научить scrapy использовать thread'ы
в) или сразу вынести обработку наружу и потом ее на других серверах делать


Сама задача - обход десятков тысяч сайтов, broad crawl.
я голосую за вариант "в".
уж что то термоядерное на обработке крутится. Не надо это в потоке скрапи запускать
источник

AL

Alexey Lemeshevski in Scrapy
Хотя, наверное, проще 8-16 scrapy запустить... и пооптимизировать обрпботку.

Сохранять страницы и выносить обработку наружу - так страницы один фиг хранить надо...
источник

AL

Alexey Lemeshevski in Scrapy
Михаил Синегубов
я голосую за вариант "в".
уж что то термоядерное на обработке крутится. Не надо это в потоке скрапи запускать
Спасибо) ...так еще и время потратить надо будет, чтобы разобраться, как это делать) видимо, да, нет смысла в потоках)
источник

i

i in Scrapy
Alexey Lemeshevski
Спасибо) ...так еще и время потратить надо будет, чтобы разобраться, как это делать) видимо, да, нет смысла в потоках)
посмотри еще видос от Коробова здесь: https://www.extractsummit.io/web-data-extraction-summit-videos-2020-attendees/
источник

i

i in Scrapy
там про async/await он в конце рассказывает, может поможет
источник

i

i in Scrapy
я чессгря этой магии асинхронщины еще не касался)
источник

i

i in Scrapy
но звучало вроде похоже на то, что надо, что он на yield'ивает какие-то задачки которые будут где-то там ждаться, а скрапи пойдет дальше молотить. Правда, не знаю, на какие условно говоря "ядра" они перекидываются при этом
источник

AR

Andrey Rahmatullin in Scrapy
в) работает только если все данные для обработки складывать в итем, либо обращаться к этому внешнему серверу в процессе скрейпинга, то и другое накладывает ограничения
источник

AR

Andrey Rahmatullin in Scrapy
i
но звучало вроде похоже на то, что надо, что он на yield'ивает какие-то задачки которые будут где-то там ждаться, а скрапи пойдет дальше молотить. Правда, не знаю, на какие условно говоря "ядра" они перекидываются при этом
Это обычный твистед, никакой допмагии
источник

D

Dmitry in Scrapy
Andrey Rahmatullin
а так, если про логику говорить, что чистейший вариант -  scrapy-inlne-requests и цикл.
Посмотрел - там последняя версия от 2016 года - доверия мало таким пользоваться. Плюс ограничения всякие, типа This decorator assumes your method have the following signature (self, response). Так что проще в цепочку засунуть. А кстати еще одна идея - вместо доп-запросов через движок scrapy, может просто через requests запросы посылать? Или это совсем не комильфо?
источник

К

Кирилл in Scrapy
не камильфо
источник

D

Dmitry in Scrapy
:(
источник

D

Dmitry in Scrapy
Значит буду зреть для диздока на фичу
источник

AR

Andrey Rahmatullin in Scrapy
requests синхронно работает же
источник

AR

Andrey Rahmatullin in Scrapy
treq асинхронно, но ты его из коллбэка нормально ждать не сможешь
источник

D

Dmitry in Scrapy
Понял. С цепочкой полная хрень тоже получается 😫 Так как в хелперы нужно передавать параметры, которые берутся с основной страницы, то приходится в хелперы передавать кучу мусора по цепочке. Ну то есть работать будет, но выглядит как мега-костыль.
def parse():
    a, b, c, d - features put into loader from xpath, but to build a full item we need features e and f, which we can only get with follow-on requests
    yield follow(callback=one, cb_kwargs={loader, a,b,c,d})

def one(loader, a, b, c, d):
    loader.add_xpath(e, "//a+b")
    yield follow(callback=two, cb_kwargs={loader, c,d})

def two(loader, c, d):
    loader.add_xpath(f, "//c+d")
    yield loader.load_item()
источник

AR

Andrey Rahmatullin in Scrapy
ну да
источник

S

S in Scrapy
Всем доброго вечера !
Может кто нибудь проходил курсы на Coursera ? Стоит ли вообще, или полная шняга ?
Поделитесь пожалуйста опытом ) Заранее спасибо )
источник

МС

Михаил Синегубов... in Scrapy
S
Всем доброго вечера !
Может кто нибудь проходил курсы на Coursera ? Стоит ли вообще, или полная шняга ?
Поделитесь пожалуйста опытом ) Заранее спасибо )
@alexey_good вроде советовал.
сам не скажу, не проходил никаких курсов...
источник