LinuxForum.Fans
Тема

Спарсить ссылки на странице

Автор: fordanov 17 сообщений 2401 просмотров
18.02.2015 23:39 #414781

Пытаюсь спарсить ссылки на странице таким способом

text
curl -sL $1 | grep -E -ion --color "(src|href).*=.*('|\").*$2('|\")"

Но выводит до последних двойных кавычек в строке.
href="http://linuxforum.ru/extern.php?action=feed&type=rss" title="RSS"

Как сделать, чтобы выводил до первых двойных кавычек или до первых одинарных встречающихся в строке? Я понимаю, что .* означает любой символ в любом количестве. Есть ли какие нибудь варианты сделать короче?

18.02.2015 23:44 · отредактировано #414782

[^\"\']* оборвется на первой же кавычке/апострофе.
... (\"[^\"]*\"|'[^']*')

19.02.2015 00:53 #414785
bormant написал:
[^\"\']* оборвется на первой же кавычке/апострофе.
... (\"[^\"]*\"|'[^']*')

Да помогло. Блин как вытащить теперь значения только ссылок. Т.е. между href=" и "

19.02.2015 12:22 #414854

Я не совсем вник в суть того что надо сделать, но возможно поможет так:

text
... | cut -d "\"" -f2

Выведет содержимое от первой кавычки до второй.

19.02.2015 12:32 · отредактировано #414862
"fordanov" написал:
Да помогло. Блин как вытащить теперь значения только ссылок. Т.е. между href=" и "

[console]sed -r 's/.*href="([^"]*)".*/\1/'[/console]
и да, почитайте man wget, там что-то такое было.

22.02.2015 04:31 #415263

Спасибо помогло

22.02.2015 10:17 #415267

может кому пригодится
сам wget умеет парсить ссылки

man wget

text

       -k
       --convert-links
           After the download is complete, convert the links in the document to make them suitable
           for local viewing.  This affects not only the visible hyperlinks, but any part of the
           document that links to external content, such as embedded images, links to style sheets,
           hyperlinks to non-HTML content, etc.

Each link will be changed in one of the two ways:

· The links to files that have been downloaded by Wget will be changed to refer to the file they point to as a relative link.

Example: if the downloaded file /foo/doc.html links to /bar/img.gif, also downloaded, then the link in doc.html will be modified to point to ../bar/img.gif. This kind of transformation works reliably for arbitrary combinations of directories.

· The links to files that have not been downloaded by Wget will be changed to include host name and absolute path of the location they point to.

Example: if the downloaded file /foo/doc.html links to /bar/img.gif (or to ../bar/img.gif), then the link in doc.html will be modified to point to http://hostname/bar/img.gif.

Because of this, local browsing works reliably: if a linked file was downloaded, the link will refer to its local name; if it was not downloaded, the link will refer to its full Internet address rather than presenting a broken link. The fact that the former links are converted to relative links ensures that you can move the downloaded hierarchy to another directory.

Note that only at the end of the download can Wget know which links have been downloaded. Because of that, the work done by -k will be performed at the end of all the downloads.

22.02.2015 14:22 #415302

Уже 100 раз говорили, что для разбора xml`я (html тоже xml) нужны специальные инструменты. "Наиболее лучшими" будут те, которые используют XPath, но раз у вас все итак работает..

22.02.2015 15:09 #415317

1000Mhz, говорят, в моськве кур доят.

22.02.2015 16:13 · отредактировано #415326
"1000Mhz" написал:
А сейчас- классика на нашем радио

[:||||:]

"1000Mhz" написал:
* ну может быть в этом частном случае регулярки и проканают
я умею писать такие sed-скрипты, которые парсят _любые_ корректные HTML.

Если вы неосилятор, не нужно этим гордиться.
22.02.2015 19:38 #415345

По поводу sed`а: а) использую, б) для того, чтобы напечатать строку №.. или что-то заменить в строке. Для других целей он мне не нужен.

22.02.2015 20:36 #415355

1000Mhz, зря не нужен :)

22.02.2015 20:52 #415358

yars, но не нужен! :) Для парсинга html мне гораздо удобнее использовать XPath вместо леса из слешей в sed.

22.02.2015 21:34 · отредактировано #415360

1000Mhz, покажите мне в моих скриптах "лес из слешей".
Или засчитываю слив.

1000Mhz, почитал вашу репутацию. Занятно. Почему вы такой агрессивный? Прям как я, лет 20 назад…

22.02.2015 21:43 #415361

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

22.02.2015 22:45 #415373

1000Mhz, поймите, писать "лес слешей" можно на любом языке. На русском тоже можно.

А специальный инструмент нужен для решения специальной задачи. Распарсить ссылки, которые сгенерировал php скрипт — лучше регуляркой. Клин клином вышибают.

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

Войдите или зарегистрируйтесь, чтобы ответить.