#1 18.02.2015 20:39:07

fordanov
Administrator
Зарегистрирован: 18.02.2015
Сообщений: 3
IP-адрес

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

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

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


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

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

#2 18.02.2015 20:44:19

bormant
Administrator
Зарегистрирован: 22.02.2010
Сообщений: 2 265
IP-адрес

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

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

#3 18.02.2015 21:53:33

fordanov
Administrator
Зарегистрирован: 18.02.2015
Сообщений: 3
IP-адрес

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

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


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

#4 19.02.2015 09:22:57

Vascom
Administrator
Зарегистрирован: 02.04.2010
Сообщений: 4 019
IP-адрес

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

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

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

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

#5 19.02.2015 09:32:18

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

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

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

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

#6 22.02.2015 01:31:12

fordanov
Administrator
Зарегистрирован: 18.02.2015
Сообщений: 3
IP-адрес

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

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

#7 22.02.2015 07:17:19

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

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

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

man wget


       -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.

#8 22.02.2015 11:22:40

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

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

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

#9 22.02.2015 12:09:17

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

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

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

#10 22.02.2015 12:22:11

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

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

drBatty, это все? А сейчас- классика на нашем радио: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
* ну может быть в этом частном случае регулярки и проканают

#11 22.02.2015 13:13:45

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

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

Quote by 1000Mhz
А сейчас- классика на нашем радио

[:||||:]

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

Если вы неосилятор, не нужно этим гордиться.

#12 22.02.2015 16:38:03

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

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

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

#13 22.02.2015 17:36:29

yars
Administrator
Зарегистрирован: 23.03.2012
Сообщений: 9 369
IP-адрес

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

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

#14 22.02.2015 17:52:46

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

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

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

#15 22.02.2015 18:34:44

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

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

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

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

#16 22.02.2015 18:43:20

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

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

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

#17 22.02.2015 19:45:23

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

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

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

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

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

Board footer