Спарсю бесплатно на Ocaml - Форум успешных вебмастеров - GoFuckBiz.com - Страница 2
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Разное > Объявления о покупке/продаже товаров и услуг
Дата
USD/RUB88.6852
BTC/USD67980.4012
Объявления о покупке/продаже товаров и услуг Также в этом разделе следует размещать и предложения о сотрудничестве.

Закрытая тема
Опции темы Опции просмотра
Старый 13.07.2013, 00:40
Start Post: Спарсю бесплатно на Ocaml 
  #11
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 925
Бабло: $196595
По умолчанию

Хочу изучить новый язык. Интерсней учить на каких-то реальных задачах. Если кому-то надо спарсить что-нибудь простое, пишите сюда, попробую спарсить c помощью Ocaml.
__________________
TgScan - узнай Telegram группы, в которых состоит человек
lorien вне форума  
Старый 16.07.2013, 15:49   #12
Shadefirst
Senior Member
 
Аватар для Shadefirst
 
Регистрация: 27.01.2011
Сообщений: 382
Бабло: $89857
По умолчанию

Спарси 10кк сайтов Алексы. Если можешь)
Shadefirst вне форума  
Старый 16.07.2013, 16:05   #13
kalombo
Senior Member
 
Регистрация: 20.04.2008
Сообщений: 599
Бабло: $116367
Отправить сообщение для kalombo с помощью ICQ
По умолчанию

Цитата:
Сообщение от vlad0708 Посмотреть сообщение

Проблема Python. В pycurl multi я заряжаю список url, прохожу по ним, потом всю инфу надо отдельно обработать, пропустить через базу, по мере добавления информации база растет и начинаются тормоза, затем зарядить новый список url (на разные сайты). И так каждый раз по новой.
А причем тут Python, если тормоза появляются при увеличении базы?
kalombo вне форума  
Старый 16.07.2013, 18:30   #14
vlad0708
coder
 
Аватар для vlad0708
 
Регистрация: 25.04.2010
Сообщений: 52
Бабло: $12590
По умолчанию

Цитата:
Сообщение от kalombo Посмотреть сообщение
А причем тут Python, если тормоза появляются при увеличении базы?
при том что не могу сразу зарядить тысячу пауков, и никакой обработки тогда не надо делать, просто insert в базу и все.
vlad0708 вне форума  
Старый 16.07.2013, 19:18   #15
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 925
Бабло: $196595
ТС -->
автор темы ТС По умолчанию

Цитата:
Спарси 10кк сайтов Алексы. Если можешь)
Напиши подробно, откуда что парсить.
__________________
TgScan - узнай Telegram группы, в которых состоит человек
lorien вне форума  
Старый 16.07.2013, 19:38   #16
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 925
Бабло: $196595
ТС -->
автор темы ТС По умолчанию

Цитата:
Не до конца. Забил 2Тб винт под завязку и остановил.
Я особо не торопился, поэтому строил DOM на BeautifulSoup. Но для более быстрого варианта у меня есть классы и на регекспах. Когда нужна скорость, использую их. Еще читал что libxml вроде как шустрее, чем BeautifulSoup.
Не вроде как, а шустрее, причём значительно. Парсить весь рунет с помощьью BeautifulSoup - это чудовщино неоптимально с точки зрения CPU-ресурса. Памяти оно тоже жрёт больше, возможно. Ну и бонусом BeautifulSoup падает на некоторых HTML-документах.

Цитата:
Проблема Python. В pycurl multi я заряжаю список url, прохожу по ним, потом всю инфу надо отдельно обработать, пропустить через базу, по мере добавления информации база растет и начинаются тормоза, затем зарядить новый список url (на разные сайты). И так каждый раз по новой.
Это не проблема python и не проблема multicurl. Во-первых, то, что ты заряжаешь multicurl пачками это просто твоя неоптимальная реализация многопоточного скачивания документов. Правильная архитектура позволяет постоянно подкладывать новые задания в multicurl по мере готовности запущенных ранее заданий. Например, мой Grab::Spider так работает. Или scrapy (правда он не на multicurl, а на twisted).

В том, что по мере роста базы начинаютя тормоза, вряд ли виноват python. У тебя, например, неоптимальные индексы, или твои индексы не влезли в память или например, не хватает скорости винчестера.

Цитата:
Ни одно решение у меня не получилось сделать, так чтобы в отдельном процессе был свой краулер на свой сайт.

То есть к примеру зарядить двух тысяч пауков, чтобы каждый паук шел на свой сайт и проходил там до 3-го уровня, а потом просто сливать готовую информацию с каждого паука в базу.

multiprocessing не позволяет сделать такое количество. Вменяемое кол-во процессов 50 - 100.
А какой смысл заряжать сразу 2000 пауков? Они будут друг у друга вырывать CPU-ресрс для парсинга HTMl. Ты упрёшься в CPU, тем более, учитывая что ты юзаешь мегатормозной BeautifulSoup

Цитата:
gevent в связке с urllib2 имеет косяк, если ДНС не резолвится, то таймаут не помогает, он просто зависает.
Про gevent ничего не скажу, я не юзал эту технологию. Про multicurl могу сказать, что если скомпилить его с поддержкой библиотеки cares, то резолвинг DNS становится асинхронным.

Цитата:
Поэтому чую для таких задач надо прибегать к помощи другого языка.
Я думаю, ты недостаточно хорошо изучил средства, предоставляемые python-платформой. С таким настроем, ты и в других языках найдёшь какие-то баги, мешающие тебе выполнить задачу.

Цитата:
У тебя есть решение на Питоне, так чтобы зарядить хотя бы тысячу пауков, чтобы каждый работал сам по себе и шел до заданного уровня?
Я не очень понял твою формулировку. Могу написать лишь за себя. У меня есть решение, которое позволяет запустить количество пауков по числу ядер т.е. забить все ядра на 100% и спарсить какое угодно количество сайтов.
__________________
TgScan - узнай Telegram группы, в которых состоит человек
lorien вне форума  
Старый 16.07.2013, 19:49   #17
vlad0708
coder
 
Аватар для vlad0708
 
Регистрация: 25.04.2010
Сообщений: 52
Бабло: $12590
По умолчанию

Цитата:
Сообщение от lorien Посмотреть сообщение
Про gevent ничего не скажу, я не юзал эту технологию. Про multicurl могу сказать, что если скомпилить его с поддержкой библиотеки cares, то резолвинг DNS становится асинхронным.
разумеется с cares, без него об асинхронности и речи быть не может.

Цитата:
Сообщение от lorien Посмотреть сообщение
Я не очень понял твою формулировку. Могу написать лишь за себя. У меня есть решение, которое позволяет запустить количество пауков по числу ядер т.е. забить все ядра на 100% и спарсить какое угодно количество сайтов.
допустим 4 ядра - ты запустишь 4-х пауков.
Не уверен, но из чтива на форумах, например на C++ можно очень много таких пауков запустить в потоках, которые будут жрать мало ресурсов. В Питоне это нельзя. Python не для мега промышленных масштабов. Об этом речь.
vlad0708 вне форума  
Старый 16.07.2013, 19:50   #18
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 925
Бабло: $196595
ТС -->
автор темы ТС По умолчанию

По поводу BeautifulSoup. Вот код который тестирует скорость парсинга заглавной страницы сайта ixbt с помощью библиотек BeautifulSoup и lxml.

http://dumpz.org/590565/

По результатам теста lxml работает в 130 (сто тридцать) раз быстрее, чем BeautifulSoup. О каких других языках может вообще идти речь с таким подходом к решению задачи?

Цитата:
допустим 4 ядра - ты запустишь 4-х пауков.
Не уверен, но из чтива на форумах, например на C++ можно очень много таких пауков запустить в потоках, которые будут жрать мало ресурсов. В Питоне это нельзя. Python не для мега промышленных масштабов. Об этом речь.
Я не знаю C++, ничего не могу сказать. Для меня лишь очевидно, что магии не бывает и если ты в состоянии подавать беспрерывно новые документы для парсинга процессам парсинга, то ни о каких тысячах процессов не может идти и речи. На каждое ядро по процессу и всё. Ядра не резиновые.

Для меня вообще потерял смысл разговор, после того как ты сказал, что юзаешь BeautifulSoup. Ты точно также в C++ или любом другом языке можешь взять чудовищно медленный парсер для разбора HTML, потом ещё например криво настроить базу данных и получить медленную скорость.

Я не говорю, что нужно вот прям брать и юзать python для промышленного парсинга. Но прежде чем говорить, что python медленный неплохо бы разобраться, что именно тормозит и можно ли это убыстрить.
__________________
TgScan - узнай Telegram группы, в которых состоит человек
lorien вне форума  
Старый 16.07.2013, 20:07   #19
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 925
Бабло: $196595
ТС -->
автор темы ТС По умолчанию

Чё-то пропал куда-то мой ответ, который я написал Если в кратце, я написал, что процессор не резиновый и если ты можешь подавать беспрерывно новые документы процессам-парсерам, то создавать процессов больше чем кол-во ядер не имеет смысла, ну может быть, в два раза больше процессов чем ядер. Но тысячи процессов - смысла нет. Ещё написал, что прежде чем пенять на питон неплохо бы разобраться, что именно у тебя тормозит, на другой платформе ты точно также сможешь найти тормозную либу для парсинга html, потом криво настроить базу данных, добавить ещё пару костылей и получить тормоза.
__________________
TgScan - узнай Telegram группы, в которых состоит человек
lorien вне форума  
Старый 16.07.2013, 21:34   #20
vlad0708
coder
 
Аватар для vlad0708
 
Регистрация: 25.04.2010
Сообщений: 52
Бабло: $12590
По умолчанию

beautifulsoup тут вообще не причем, тесты делал на чистых регулярках
я о том что не получается запустить очень много независимых пауков на питоне. В C++ работают потоки (жалко что я его не знаю, а учить времени нет), в Питоне разных независимых пауков можно только через multiprocessing запускать, а это совсем не то.

Я думал ты OCaml начал изучать - потому что уперся в это ограничение. Если не для этого, то зачем он вообще нужен. В тиобе рейтинге он в жопе, а это значит проблемы с библиотеками
vlad0708 вне форума  
Старый 16.07.2013, 21:53   #21
masolit
Senior Member
 
Регистрация: 18.08.2007
Сообщений: 1,094
Бабло: $199375
По умолчанию

lua ?
masolit вне форума