Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Принцип Javascript парсинга (https://javascript.ru/forum/offtopic/10588-princip-javascript-parsinga.html)

greatilya 11.07.2010 06:24

Принцип Javascript парсинга
 
Прощу прощения если запульнул не в тот раздел, не смог выбрать более подходящий.

Столкнулся с идеей парсинга сайта на Javascript. Имеется HTML страница с картинками. Нужно методом POST отправить:
1. код страницы
2. картинки (1-4 штуки, файлами)

С 1 пунктов проблем я думаю не возникнет. Если действовать стандартными методами, то это фрейм который подгружает нужный УРЛ, после чего мы запрашиваем у него видимо innerHTML, или что-то другое, но думаю это не сложно. А на jQuery есть функция load() для получения кода страницы, думаю она даже лучше подойдет.

Потом полученный код обрабатываю и ищу в нем адреса нужных картинок. И вот тут наверное главный вопрос, а как их прикрепить к отправке формы, как будто мы отправили через <input type="file" ... > ?

...

Как я понял отправить методом POST не получится файлы, т.к. это нарушает принцип безопасности HTML. А имеет ли жизнь такой вариант: через какую-нить Javascript функцию получить код картинки (а-ля бинарный код или т.п.) его закинуть в <textarea>. А на стороне сервера обратно скомпилировать из него картинку? (картинки в формате jpg)

Riim 11.07.2010 07:31

Наверное, лучше сразу в сторону флеша копать.

greatilya 11.07.2010 08:18

Цитата:

Сообщение от Riim
Наверное, лучше сразу в сторону флеша копать

флеш, совсем не знаю...
а на Javascript возможно получить код картинки? чтобы потом перекодировать обратно на PHP...

Riim 11.07.2010 08:29

Цитата:

Сообщение от greatilya
а на Javascript возможно получить код картинки?

99.9% нет, разве что в IE. Еще, кажется, можно цвета пикселей на canvas-е в FF получать.

B@rmaley.e><e 11.07.2010 08:30

Можно только XHR'ом, на который действует ограничение по доменам.

PeaceCoder 11.07.2010 11:01

Непонимаю зачем так ломать голову? Получаете адрес картинки и отправляете его серверу. На серверной стороне просто получаете данные get_file_contents и записываете на сервер. все. зачем еще чето мудрить?

Gozar 11.07.2010 11:11

greatilya,
картинки это каптча?

greatilya 11.07.2010 15:55

Цитата:

Сообщение от Gozar
картинки это каптча?

Нет не капча... а просто парсинг...

да я уже понял... вначале "обломался" с картинками... потом оказывается и с фреймов инфу не получить.... придется парсить с сервера на динамическом ip...
Всем спасибо!

Gozar 11.07.2010 18:17

Цитата:

Сообщение от greatilya (Сообщение 63185)
да я уже понял... вначале "обломался" с картинками... потом оказывается и с фреймов инфу не получить.... придется парсить с сервера на динамическом ip...

а при чем здесь динамический ip?

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

PeaceCoder 11.07.2010 18:43

Цитата:

Сообщение от Gozar
то что уже получено?

он по ходу хочет перевести адрес картинки в данные этой картинки.

Gozar 11.07.2010 18:59

Цитата:

Сообщение от PeaceCoder (Сообщение 63210)
он по ходу хочет перевести адрес картинки в данные этой картинки.

я в этом нисколько не сомневаюсь.

greatilya 12.07.2010 03:56

Цитата:

Сообщение от Gozar
То что вы обломались не означает что вопрос не решаем, по поводу фреймов могу сказать что эту идиотскую мысль нужно откинуть сразу как только она придет. И уж тем более не понятно зачем отсылать на свой же по видимому локальный сервер, то что уже получено?

Объясню,
написал парсинг некого сайта. Работает сам, абсолютно без моего участия. Парсинг должен работать постоянно, ~ целыми днями. Чтобы не получить бан на ip, сделал запросы к сайту раз в минуту. Парсил с 4 ip адресов. Через 3 дня работы скрипта забанили 3 ip адреса принадлежащих моему VPS серверу. 1 ip адрес моего локального компьютера не забанили, хотя с него шло не меньше запросов. Итого напрашивается вывод, что админы увидели что с тех ip адресов идет парсинг, т.к. запросы повторяются, и ip адрес принадлежит хостеру, а не обычному провайдеру домашнего интернета.
Итого, я захотел релизовать систему, при которой:
- захожу с любого ПК на свой сайт, открывается страница, на которой будет происходить парсинг нужной страницы силами JS(при этом возможность получить бан минимальна)
- после все данные отправляются на мой сайт

... теперь уже ясно, что такую схему реализовать не получится...

Цитата:

Сообщение от Gozar
а при чем здесь динамический ip?

есть ПК подключенный по динамическому ip.. придется установить сервак на него, и можно парсить с высокой скоростью, т.к. бан придет не раньше чем через сутки, а сменить ip адрес проще простого. Но при этом способе весь парсинг ложится на 1 ПК.... а хотелось бы большего.

Устанавливать сервера (denwer) на все ПК с которых бы мог парсить нет возможности.

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

B@rmaley.e><e 12.07.2010 06:11

Цитата:

Сообщение от greatilya
теперь уже ясно, что такую схему реализовать не получится

Получится, если использовать UserJS.

greatilya 12.07.2010 07:40

B@rmaley.e><e,
Огромное спасибо за UserJS! Вы сами им пользовались, насколько сложен в освоении?

PS: если разберусь, то выложу скрипты.

B@rmaley.e><e 12.07.2010 15:57

greatilya, я пишу юзерскрипты под оперу, почитать можно тут: http://operafan.net/content/view/26/2/
В ФФ и хроме они тоже есть, но там они работают по-другому.

greatilya 12.07.2010 18:03

B@rmaley.e><e,
С днем рождения вас! Крепкого здоровья, любви и море счастья!

larafyll 13.07.2010 14:54

greatilya, меня так же интересует отсылка картинки средствами javascript (мой пост). Вы нашли решение своей проблемы?

greatilya 13.07.2010 18:07

larafyll,
сейчас двигаюсь в двух направлениях:
1 изучаю UserJS (застрял на том, что не могу выдернуть HTML код)
2 пытаюсь реализовать данные задачи на Delphi (не писал на нем уже оч давно, ищу пока)

Я эту тему точно добью, вам в личку напишу, раз вам так интересна эта тема, также в этой теме выложу свои исходники, скрипты, программы...

larafyll 14.07.2010 22:47

Если вам надо получить HTML код страницы, можно воспользоватся XMLHttpRequest'ом. Однако, если требуется "живой" HTML, он не поможет.

greatilya 15.07.2010 04:11

Да уже практически сделал на Delphi, мне там более понравилось это реализовывать, по крайней мере файлы там легче простого отправлять...
Вот пример
как допишу свой код, выложу его, а на JS наверно не смогу реализовать... знаний не хватает...

greatilya 01.08.2010 06:52

Задача была решена. Как и говорил уже не с помощью JS. Реализовано на языке C.

Если кому интересно, подробно описал на своем блоге.

Gozar 01.08.2010 08:32

Цитата:

Сообщение от greatilya (Сообщение 65854)
Задача была решена. Как и говорил уже не с помощью JS. Реализовано на языке C. Если кому интересно, подробно описал на своем блоге.

решение кривое, ИМХО, решается правильно задача на XUL и userJS.

greatilya 02.08.2010 05:00

Цитата:

Сообщение от Gozar
решение кривое, ИМХО

для некоторых задач может оно и кривое, но я пока не увидел ни одного минуса от данной реализации для решения моих задач. Если запустить данное приложение со многих компьютеров, то имея нормальный сервер можно спарсить достаточно большие сайты в короткие. 2 ПК ~ 40 000 страниц в сутки.
Конечно я понимаю что можно как-то на UserJS решить эту задачу... Но зачастую легче дать программку которые друзья будут запускать, нежели объяснить им про настройку в браузере UserJS и т.п. Причем каждый пользователь пользуется разными браузерами.

larafyll 13.08.2010 22:54

Цитата:

Сообщение от Gozar
решается правильно задача на XUL и userJS.

Gozar, вас не затруднит привести пример передачи картинки POST методом средствами userJS?


Часовой пояс GMT +3, время: 01:39.