LINUX.ORG.RU

Парсинг url

 bash. web, , ,


0

1

Добрый день, возникла следующая проблема . Есть файлик с овер 1к ссылок, на страницы, на которых имеется следующий код

<div id="viewooditem_14154483648489995946" class="itemthumbsupergood" onmouseover="Tooltip_over(14154483648489995946);" onmouseout="Tooltip_out(14154483648489995946);" onclick="changeGoodsItem('14154483648489995946');"><img src="/images/01020401-00185.png" width="55" height="55"><br>Good</div>
я в вебе очень плох, но на сколько я понимаю тут идут вызовы js скрипта, защищающий это это изображение.
Собсвено задача распарсить url этой картинки. Известным мне способом lynx -dump не вышло, ибо lynx ее просто не видит. C Wget тоже не получилось. Чем бы еще можно продампить? Прошу помощи, ибо руками 1к страниц не осилю =(

★★★★

Последнее исправление: comp00 (всего исправлений: 1)
Ответ на: комментарий от comp00

Если структура сложная, возьми какой-то xpath-парсер и достань по xpath, а если простая, то грепни и дело с концом. Если набежит Kalashnikov со сслыкой на SO и криками «кто парсит xml рекэкспами - тот лох!», забей.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

я думаю структура будет посильна grep, вот только не нашел способа как грепнуть исходник, не сохраняя при html-й файл (тонкий намек на wget)

comp00 ★★★★
() автор топика
Ответ на: комментарий от stevejobs

когда мне нужно скачать сайт, я пользуюсь wget. Бесплатно, свободно, и под онтопик. А ты мне тут про какие-то эксплореры..

comp00 ★★★★
() автор топика

Я не совсем понял задачу, но следующая регулярка должна помочь:

^([a-z][a-z0-9+\-.]*:(//[^/?#]+)?)?([a-z0-9\-._~%!$&’()*+,;=:@/]*)

anonymous
()
Ответ на: комментарий от cdshines

Если набежит Kalashnikov со сслыкой на SO и криками «кто парсит xml рекэкспами - тот лох!», забей

Кто парсит HTML регэкспами, когда есть вещи типа

http://htmlcleaner.sourceforge.net/

или

http://jsoup.org/

тот действительно эпический лох. Ему даже собственная секретарша не даст.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

http://jsoup.org/

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

comp00 ★★★★
() автор топика
Последнее исправление: comp00 (всего исправлений: 1)
Ответ на: комментарий от comp00

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

cdshines ★★★★★
()
Ответ на: комментарий от bug

ну, например, стягивать «картинки, защищенные js'ом», отправлять html-формы с разными параметрами (типа страниц с пагинатором в виде выпадающего списка), итп (при этом чтобы он не наотправлял лишнего, н-р не нажал кнопку «удалить мою учетку» там есть регулируемые исключения). Сохраненный JS и прочее говно он тоже переписывает, чтобы обращался только к локалхосту. Т.е. в результате получается статическая копия динамического сайта.

stevejobs ★★★★☆
()
Ответ на: комментарий от vertexua

программа на Java потребует компиляции, jar файлов и т.д.

не знаю что значат все эти слова, открываю текстовый редактор (eclipse) пишу туда что надо и нажимаю кнопку «запустить», УМВР ЧЯДНТ

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

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

cdshines ★★★★★
()
Ответ на: комментарий от comp00

Попробуй запустить это на странице этого треда:

var iterator = document.evaluate('//img', document, null, XPathResult.ANY_TYPE, null);

try {
  var thisNode = iterator.iterateNext();
  
  while (thisNode) {
    console.log(thisNode.src);
    thisNode = iterator.iterateNext();
  }	
}
catch (e) {
  dump( 'Error: Document tree modified during iteration ' + e );
}

cdshines ★★★★★
()

html - это подмножесство XML, а именно DOM-модель.

Для его парсинга лучше применять парсеры DOM.

bvn13 ★★★★★
()
Ответ на: комментарий от comp00
wget -O- http://… 2>/dev/null | sed -nr 'тут регулярка' | wget -i-

не? Я не совсем въехал, по какому критерию ты хочешь выкусывать URL, пиши подробней.

Deleted
()
Ответ на: комментарий от stevejobs

Может ему нужно на сервак это дело. A Eclipse-проект в качестве deployment package - не кошерно

vertexua ★★★★★
()
Ответ на: комментарий от cdshines

файл с линками? Есть. Xpath такой

/html/body/div[@class='shade']/div[@class='bg contentbot']/div[@id='content']/div[@class='padd']/div[@class='container_main main_right_pos']/div[@id='com_item']/div[@class='item_contener']/div[@class='level_left']/div[@class='imgitem']/img[@class='zoomimg']/@src
что мне с ним делать?

comp00 ★★★★
() автор топика
Ответ на: комментарий от comp00

Чего? ЯННП. Какие вхождения wget должен искать?

Deleted
()
Ответ на: комментарий от comp00

Если ты эту страницу в хроме смотришь, сделай ей такой evaluate, как я показал, только xpath свой подставь - это самый негеморный варант на один раз. Если нет - возьми любой перл, напиши скрипт и наслаждайся.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

ну, ваши извращения по запуску xpath в консоли разработчика хромиума чтобы сохранить картинку выглядят как минимум не менее забавно и оригинально... но лучше всё-таки с бабами делать это

stevejobs ★★★★☆
()
Ответ на: комментарий от cdshines

это конечно уже результат вот только как это сделать в приделах одного скрипта? Неужели из баша никак?

comp00 ★★★★
() автор топика
Ответ на: комментарий от stevejobs

Да что же вы так к этим мистическим «бабам» пристали-то?! В каждом сообщении пытаетесь меня склонить к беседе об оных. Отвяжитесь от меня, гадкий вы, противный балабол.

cdshines ★★★★★
()

Скорее не защита, а плюшки на яваскрипте.

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

Kalashnikov ★★★
()
Ответ на: комментарий от comp00

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

/0 Писать на баше извращение кроме самых простейших случаев. Супопарсеры, собственно, есть не только под жабу.

Deleted
()
Ответ на: комментарий от stevejobs

Хозяйке на заметку: шутка про женщину становится смешнее с каждым разом. Осторожно, ближе ко второму десятку попыток вы рискуете быть посланными. Козероги, вас ждет удачная командировка. Овнам следует избегать брюнетов.

cdshines ★★★★★
()
Ответ на: комментарий от vertexua

Пошел я таки по пути питона, но столкнулся с проблемой. Вот проблемный участок Нужно сделать следующеe: получить 4ре цифры,между <br> и </div>, и собственно адрес, что 2мя строками выше. Я смог получить класс <supergoods> но дальше процесс не идет. Эти цифры просто не ищутся. Причем, ни в данном блоке, ни во всем документе. Как-будто их данная библиотечка игнорирует. Делаю через

soup.find()
. Объясни если не сложно, как мне имея родительский блок пробежаться по всем этим <li> и найти в них нужное значение. Вроде есть метод findChildren(), но что с этим лесом делать не понятно.

comp00 ★★★★
() автор топика
Ответ на: комментарий от comp00

find выбирает элементы среди потомков, текст - это не элемент. Если хочется разобраться, почитай что такое узел (Node) и элемент и чем они отличаются.

Для текста в супе есть .text, он вернёт всё текстовое содержимое элемента конкатенируя текстовые узлы.

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

Все, разобрался. Спасибо.
//Уж не думал что придется учить что-то принципиально новое, но это к лучшему.

comp00 ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.