LINUX.ORG.RU

помогите найти скрипт для парсинга сайтов.

 


0

2

добрый день,

встала задача, которая мне пока еще слабо поддается. нужно отредактировать файл в несколько десятков тысяч строк взяв оттуда домены и ip адреса. Домены нужно далее перевести в ip. Есть ли готовые решения по теме или подобные? любой сайт в тексте имеет // вначале, и / в конце.


Готовых нет и не может быть. Берешь bash\python и пишешь.

anonymous
()

Простейшая регулярочка. Готовых решений нет.

kachan ★★
()

любой сайт в тексте имеет // вначале, и / в конце.

\/\/(www\.)?\w+?\.\w+?\/как то так. А потом пристыковываешь http(s): и прогоняешь по базе.

somequest
()

для доменов ниже второго вот эта вроде работать должна \/\/(www\.)?([0-9a-zA-Zа-яёА-ЯЁ-]+?\.)+?[0-9a-zA-Zа-яёА-ЯЁ-]+?\/

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

А теперь добавь для случая когда в начале нет // (или там есть протокол) и/или в конце нет /, вместо этого в конце может быть что-то без указания расширения «файла», а так же с указанием, кроме того там может быть якорь (#). И не забудь про урлкодирование и пуникод.

Ну а мы посидим посмотрим на твою простейшую регулярку.

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

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

somequest
()
Ответ на: комментарий от deep-purple

href=«vk.com»

Кстати, такого адреса быть не может. Относительные пути работают только внутри домена.

somequest
()
Ответ на: комментарий от deep-purple

Да мне вообще насрать, я с ним договор не заключал, и гарантий не давал. Но для его случая это должно работать, я тебе 3-й раз повторяю, ты че тормоз чтоли?

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

Нет, туда тире не входит

Так я его и добавил.

и во многих реализациях национальные символы

Юникод тоже считается в \w. Ну, по крайней мере в языках, которые юникод поддерживают:

$ php -r 'echo preg_replace("/[\w\-]/u", ".", "asd456- +фыв"
....... +...

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

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

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

Плюс, туда входит нижний пробел, я не помню, кстати, он может быть в названиях доменов?

Пробел не бывает верхним или нижним :) Подчеркивание не входит в состав доменных имён по RFC, и поэтому не поддерживается корневыми серверами. Но в доменах N-го уровня иногда встречается: http://test_1.home.balancer.ru/

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

Эта строка придет на сервер, с подставленным путем, а сервак уже диспатчит это как хочет

Я говорю, как будет формировать запрос браузер, а не то, что потом будет делать с этим запросом сервер, _не являющийся_ vk.com :)

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

В JS например не входят, хотя юникод поддерживается.

Значит, криво поддерживается. Т.е. стандарты для упрощения могут быть какие угодно, но суть: «\w will match the «word» characters».

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

ты пишешь

Будет искаться ссылка ./vk.com в текущем пути

кем искаться? браузер ничего не ищет, он отправит строку на текущий домен, и все. А серверу срать на текущий путь вообще, он может при желании вообще сбросить, или перенаправить куда нибудь, хоть на тот же вконтактик.

somequest
()
Ответ на: комментарий от KRoN73

Значит, криво поддерживается

Что значит криво? Полная поддержка, ЕМНИП. Просто движок так написан. Движок регекспов — это отдельный механизм.

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

кем искаться? браузер ничего не ищет

Какие вы зануды. Ок, точнее будет звучать не «искаться», а «запрашиваться». Сути это не изменит.

он отправит строку на текущий домен, и все

Угу. Вот только доменом этим будет не vk.com (что хотел показать автор примера).

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

Что значит криво? Просто движок так написан.

Вот движок криво и написан. У него «word» не подразумевает юникодные слова, только латиницу (возможно — однобайтовые кодировки, лениво проверять).

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

лол

Троллинг был слишком тонким? Ок, другой раз потолще попробую :)

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

что хотел показать автор примера

автор примера горячо желал показать что регекспы не нужны, и просто лоханулся. Эта строка в любом случае не должна входить в список адресов, которые хотел ТС, ему нужны адреса доменов, а не текущих относительных адресов

somequest
()
Ответ на: комментарий от KRoN73

Вот движок криво и написан.

Слушай, ты какой-то странный. Если бы движок не поддердивал юникод, он бы и не парсил его. Это просто специфика. И, кстати, это удобней даже, например, под \w попадают разрешенные символы в синтаксисе литералов большинства ЯП, не надо ничего отсекать. Просто надо иметь в виду эту специфику, она есть в любом диалекте, и поддержка юникода тут не при чем.

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

И, кстати, это удобней даже, например, под \w попадают разрешенные символы в синтаксисе литералов большинства ЯП

Тогда это был бы не \w, а какой-нибудь \l. Чистая семантика. Впрочем, сегодня большинство языков поддерживают юникод и в литералах. Что, опять же, в рамках естественной семантики.

Просто надо иметь в виду эту специфику, она есть в любом диалекте

У нормальных людей семантика важнее левых волюнтаристских ограничений.

KRoN73 ★★★★★
()

сайтьі отлично парсятся с помощью python + liburl2 + beautifulsoup. Использовать в данном случае regexps — моветон.

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

Что, звездочки зарабатываешь ?

anonymous
()

:) однако, дисскуссия...по делу, regexp ни одна не подошла. я конечно, подправлю сегодня, если ни у кого мыслей не будет.

Вот пример:

url="http://soup.mmsn.ru/sp/upload.php"

Т.е. www не обязательно есть.

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

Нафиг эти регэкспы. Сначала удаляешь http:// или https:// Потом удаляешь все что справа от домена. (начиная с «/» и правее).

Int0l ★★
()

Давай линк на файлик я тебе на кложе напишу скрипт.

Int0l ★★
()

Для преобразования доменов в ip-адреса можно использовать команду dig. В арчлинуксе она находится в пакете bind-utils.

dig +short mmsn.ru
77.73.138.32

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

www не обязательно есть.

каво?

re = /\/\/(www\.)?([0-9a-zA-Zа-яёА-ЯЁ-]+?\.)+?[0-9a-zA-Zа-яёА-ЯЁ-]+?\//g

"iiwiwiieiie iriir http://soup.mmsn.ru/sp/upload.php kdjjj\njfjhttp://www.soup.mmsn.ru/sp/upload.phpldlld[[[3=3949ieujdjjdjjd http://soup.mmsn.ru/sp/upload.phplllslldldllflfll"
.match(re)

//  //soup.mmsn.ru/,//www.soup.mmsn.ru/,//soup.mmsn.ru/

somequest
()
Ответ на: комментарий от Legioner

минус рядом с квадратной скобкой экранировать необязательно

Лучше его всегда экранировать. Ибо завтра кто-то допишет символ и всё обвалится. Или поменяется что-то в правилах. Сегодня так на сайте ошибка вылезла :)

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