Как стать автором
Обновить

Комментарии 74

Как вы заебали, ловцы готового, парсеры-шмайсеры. Я понимаю, что это может применяться и в аналитике. Но сиди и анализируй, с хера выкладывать в паблик инструменты для мошенников-пионеров?
«В древности в таких случаях мы строили свой велосипед» в древности, блять, стрелялись из-за воровства.
Следуя вашей логике (элементарный пример):
Чтобы узнавать курс доллара вы предлагаете отправлять своих посетителей на сайт ЦБ РФ или предлагаете им отправить SMS на номер *** с текстом "?USD"? :)
Для общих вещей всегда есть стандартные методы выгрузки. Как для валют: export.rbc.ru/.
Я тоже против статьи в таком виде, нужно описывать приемы программирования, а не стимулировать воровство контента.
Украины… Вы бы еще про Замбию спросили.
А на Украину и Замбию проблемы программирования не распространяются?
В некоторых случаях это не воровство, а распространение контента (как привели ранее про курсы валют)

можно и другие плюсы найти…
пример моего сотрудника: чел захотел купить машину именно марки М и до суммы С — он написал парсер нескольких сайтов с объявлениями и постоянно получал свежую информацию о ценах интересующей его модели… — чем плохо?

Статья полезная! Спасибо автору!
оо да, набежали хомячки-борцы за справедливость, половина небось сидит на пиратской винде и юзает пиратский софт, но спарсить несколько кб байт данных это преступление века.
У меня лицензионная Windows и купленный софт. У меня есть сайт. Написано over 900 уникальных авторских материалов. У меня крадут. Я тоже против.
Технически я понимаю как могу защитится, но это будет во вред пользователям, скорости и поисковому продвижению. У автора комментария, вероятно, есть конкуренты. У вас, видимо, нет. Рад за вас.
Автор не предлагает воровать, он предлагает парсить.

Если у вас сервис уникальный, а у него воруют весь его функционал, то:
1) можно настучать поисковикам
2) несложно защититься. (что пойдет на пользу здоровью ресурса)

Если информацию с ресурса парсят с другой целью (недвижимость, тендеры, объявления, новости и т.д.), то что в этом плохого? Предпочитаете пользоваться каталогами для поиска информации? Или перебирать 30 страниц выдачи, с целью найти искомое? Гугль с яшей ничем не отличаются от ваших «злодеев». Они, суки вообще только и делают, что парсят, и ничяго, им еще за это и приплачивают.

Ваш ресурс кому полезен? Гуглу, людям или вам? Почему википедия не волнуется за свой контент? У них больше 900 по тыщи знаков

Пардонте за моветон, веткой камментов навеяно.

P.S. Я не предлагаю удариться в альтуризм, или кричать «Information must be free». Просто, как мне кажется, хороший контент своего хозяина не потеряет. Так или иначе.
Википедия не волнуется за свой контент, потому что она на нем не зарабатывает.

Ваш комментарий из цикла «Почему в банке охрана, вот я был в супермаркете, там охраны нет».
1) т.е. если я выложу статью, и не поставлю баннера — я могу быть спокоен? )))))
2) в супермаркете охраны не меньше, чем в банках, а в крупных — больше.
3) вы каммент читали (весь?)
Насчет настучать поисковикам — не понимаю, причем здесь эта статья. Любой контент, который находится или может находится в индексе поисковиков, в 10 раз легче парсится без всякого ватира. Поисковики не разбирают js, ajax, поэтому там обычный html. Ватир нужен, когда парсятся специальные страницы со сложными динамическими данными. Статистики, цены. Настолько динамические, что поисковикам нет смысла их рассматривать.
гм. Я отвечал на комментарий, и про стучание поисковикам именно в этом ключе упомянул. Так сказать боролся с ветряными мельницами )))

С ватиром все понятно, и большое спасибо за пост. Из-за незнания, что такое mechanize потерял два дня, и еще два-три часа, чтобы под него переделать граббер. Теперь и про ватир знаю. Спасибо.

P.S. Надеюсь, что проблем с asp-шными viewstate у него нет )).
Ого, оказывается сколько тут тебя заминусовало. Мой ответ постигнет наверняка та же участь. Видимо у многих до сих пор считается нормальным воровать контент. Даже когда им дают удобные средства этого избежать. Их не пугают даже сложности, как говорит автор, парсинга «очередного отмороженного сайта».
Парсинг бывает мелким и безобидным, а бывает действительно убыточным для владельца контента.

Неужели убудет от контакта, если мы возьмем у них список городов? Или от автомагазина, если мы возьмем список моделей машин?

Но если нагло украден основной контент сайта, то тут, конечно, надо подавать с суд.

Бывают и такие случаи, что и владелец не против, чтобы у него брали информацию, но ему в лом писать API.

В общем, суть в том, что парсинг — это технология. Как и торренты. А как ее применять — это уже дело каждого.
На том же GameSpot есть нужный мне список десятков тысяч видео игр, но я же не вор, пожалуй бездарно потрачу несколько месяцев на добавление информации вручную, чтобы прийти к тому же результату!
Но, данная информация полезна не только ворующим, но и защищающимся.
че за бред пля, сгинь
Успокойся :)
Если преимущества у watir перед selenium?
Простите, читать: «Есть ли преимущества у watir перед selenium?»
так и прочитал :)
Я зашел сюда прочитать или написать этот комментарий.
coz this is RUBY
selenium тоже ruby
Мне кажется, что селениум мощнее, но объемнее.
из того что бросилось в глаза, и пожалуй самое стоящее — здесь не нужны xpath
практически нет. считается только что ватир больше заточен под ИЕ а селениум под фф
>>сам сайт грузился в iframe, а скрипт извне отправлял dom-дерево ифрейма обратно на сервер.
можете это место подробнее написать? Вроде нельзя же доставать dom iframe-а
Замените регулярки на hpricot
nokogiri уж тогда
а какая разница?
nokogiri быстрее раз в 10
Отличный инструмент, попробую в использовании.

Только 1 совет, под конец, когда достали результаты, проще и удобнее будет использовать Nokogiri для парсинга.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Выглядит устрашающе, с таким нужно еще поучиться пользоваться :)
Несколько замечаний по коду чтобы приблизить его к ruby-way:

while true do… end меняем на:
loop do .. end


# в строке
if (next_link.exists?) then next_link.click else break end
# лучше использовать тернарный оператор:
next_link.exists? ? next_link.click : break


# слишком избыточный однострочный if, и скобки лишние тут
if (div.class_name != "module") then next end
# вот так намного лучше:
next  if div.class_name != "module"


А еще блоки кода лучше заключать в тег
<source lang="ruby"></source>
Большое спасибо. Руби совсем не знаю. Поставил его вместе с watir-ом чтобы изучить последний.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
ну тут больше на любителя, так-то они оба правильные

лично мне второй вариант больше нравится, зачем эти лишние скобки и if/else?
Тернарный оператор по смыслу больше подходит, когда важно возвращаемое значение (и в нем неожиданно будет увидеть код с побочным эффектом)

if/else же не имеет возвращаемого значения, и в него уже стоит писать код с побочным эффектом.
В Ruby if-else имеет возвращаемое значение.

>> a = if 5 > 3 then 2 else -2 end
=> 2
А, извиняюсь, в таком случае if/else эквивалентен ?:

Но всё же использовать if в качестве замены ?: не вижу смысла — код это не сокращает, а читаемость снижает (так как в стандартных языках: C/C++/Java if/else таким образом не используют)
а есть подобное для Python?
Не знаю есть ли такое, но есть лучше. seleniumhq.org/
после опыта selenium+.net/perl и watir (на реальных задачах)
мой выбор — watir причем ruby тут составляет важную часть
очень КРАСИВАЯ связка, приятная в использовании
и сильно менее многословная.

ну а у watir есть кучу его реализаций, watin — .net, watij — java

каждому свое.
У вас есть опыт работы с селениумумом?

Расскажите, плиз, по нему след. моменты:

1) можно ли задавать для каждого отдельного потока браузера свою проксю?
2) можно ли там сохранять картинки?
3) сколько примерно одновременно получается через селениум запускать ФФ?
использовал Scrapy
scrapy.org/

just for fun делал отчет кто и сколько по времени и в какие часы из моих друзей и закладок сидит вконтакте…
кто хочет попробовать-поучиться, но не знает, что бы ему пропарсить — вот довольно занятная и смешная вещь) для хранения можно использовать nosql)

местами даже полезная, если вдруг вы кого-то ищите из фрилансеров, которые на вас работают, а он прячется от вас и затягивает сроки — добавляете его вконтакте, ставите вот такого шпиона, и он вам показывает когда тот человек бывает, подкараулить его со статусом online и отругать становится проще) ну и в некоторых других случаях тоже помогает)

потом было прикольно смотреть на графики… жаль, мне надоело и я забил на этот проект)
также парсю сайтики типа entropiatracker.com и другие достаточно простые через крон раз в минуту)

какие-то очень сложные вещи — даже не знаю, не пробовал… но я думаю, что особых проблем быть не должно…

что касается использования парсеров для воровства контента — мне бы хотелось чтобы алгоритмы поисковиков были оптимизированы таким образом, чтобы этот процесс был невыгодным и риски попасть под штрафные санкции был бы выше прибыли от использования ворованного контента…

однако парсеры как класс программ нужны и очень полезны для сбора интересных отчётов и решения сложных задач типа при добавлении какого-то объекта на наш сайт, добавить такие же объекты в базы других сайтов :-) не все сайты предоставляют API и не все хотят предоставлять это API…
а такая штука как mechanize уже не работает для парсинга данных? вроде она для этих целей и создавалась
p.s. while true do тоже смутило, получается выйти из цикла не получится никогда…
Там break стоит в цикле
Mechanize не отрабатывает JS, в этом я и фишка у Watir, что запуск от браузера страницы со всеми делами.
возможно ли заюзать подобное в сборе отельных данных для anthil ;) с учетом большого количества запросов. не проверял на том глючном сайте с яваскриптом?
holidayinn.com? отлично парсится. можно было и его в качестве примера привести. а вот анты были больно дохлые, их можно было использовать разве что как прокси-сервера, без всякой обработки сливать все на антхил.
Забыли чут дальше процитировать:
«Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp».

Хорошее у него сравнение :)
Там вообще весь пост классный, так что стоит сходить по ссылке, да.
и русские хакеры крадут ваш сайт? Че они так про нас…
Это к вопросу о штампах в сознании западного обывателя, далекого от политики.
Вроде бы разумный человек, хорошо мыслит, начитан. А все равно где-то в глубине сознания сидит картинка типа «Downloading mp3, you are downloading communism»: то есть русские — это какие-то злобные монстры независимо от их политического строя.
Любопытный сигнал — думаю, у нас касательно их не меньше штампов и стереотипов.
НЛО прилетело и опубликовало эту надпись здесь
Кстати, с Watir давно уже пора сделать нормальный anonym proxy сервис, а то у моего тайского провайдера WinBB половина сайтов закрыто министерством культуры и печати :(
>>Но так делать не следует. Каждая команда watir-а к элементам dom-дерева — это лишний запрос к браузеру.

конечно, он будет тормозить, попробуйте такое

require «rubygems»
require «firewatir»

ff = FireWatir::Firefox.new
ff.goto(«www.travelocity.com/Hotels»)

t_now = Time.now
t_tomorrow=t_now + (60 * 60 * 24)

ff.text_field(:id,«HO_to»).set(«New York, NY, USA»)
ff.text_field(:id,«HO_fromdate»).set(t_now.strftime("%m/%d/%Y"))
ff.text_field(:id,«HO_todate»).set(t_tomorrow.strftime("%m/%d/%Y"))
ff.form(:name,«formHO»).submit

do_f=true
while do_f do
ff.wait_until{ff.div(:id,«resultsList»).div(:class,«module»).exists?}

puts «page: #{ff.div(:id,'resultcontrol-top').strong(:text,/\d+/).text}»

ff.div(:id,«resultsList»).divs.each do |t|
next if (t.class_name != «module»)
name=t.h2(:class,'property-name').links[2].text
price=t.h3(:class,'price')
price=price.span(:class,'newprice') if price.span(:class,'newprice').exist?
puts "#{name} -> #{price.text}"
end

if (ff.link(:class,'gwt-Anchor next').exist?)
ff.link(:class,'gwt-Anchor next').click
else
do_f=false
end

end
Подскажите а есть ли аналогичные средства для PHP? Вожможно ли приспособить для этого node.js?
Вы знаете как через watir сохранить картинку в файл?
Через image.save() у меня не получается. Браузер открывает диалоговое окно для сохранения и на этом все прекращается. Как сделать чтобы он автоматом сохранял картинку?
ie = Watir::IE.new
ie.goto «yandex.ru»
ie.image(:src, 'http://img.yandex.net/i/www/logo.png').save(«d:\2.png»)

— вот пример кода. Браузер вызывает диалог сохранения картинки, и там вбито в названии файла «logo», а не мой путь. И автоматом он картинку не сохраняет.
И еще пару вопросов по watir появилось :)

1) Можно ли для запуска браузера указывать прокси?

2) Сколько одновременно браузеров на среднем компьютере получается запускать через watir? И какой вариант для большей многопоточности оптимальнее: ie или firefox?
1. В настройках ff проставьте настройки соединения, будет вам через прокси.
а как сделать чтобы в 10 потоках одновременно было 10 разных проксей?
Я бы не рассматривал watir как панацею от всего. Распарсили url картинки — открыли сокет, закачали.
картинки бывают динамические, которые без правильных кук и прочих хедеров не скачать через сокет, надо качать их в сессии запроса страницы
Если вопрос про cookie, то с ними идет работа через ff.document.cookie. Естественно, их нужно добавить в запрос.
С трудом могу представить систему, где картинки зашиты в js код и грузятся через какой-нибудь data: uri sprites. В остальных случаях это все же ссылки на файлы, и для их загрузки ватир не нужен.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации