Как я могу "найти" все ссылки из исходного кода веб-страницы?

356
jsterr

Я хочу иметь только https-Link в отдельном файле. Как это сделать, не получив полную строку кода, только ссылки?

enter image description here

0
Это недопустимый HTML (где находится `href =" `? Attie 5 лет назад 0
уже сгребли его и заменили :-) jsterr 5 лет назад 0
Чтобы уточнить, вы ищете решение с использованием `findstr` или` grep`? Worthwelle 5 лет назад 1
findstr было бы неплохо, grep - это юникс, верно? jsterr 5 лет назад 0
Обычно да, но он также был [скомпилирован для Windows] (http://gnuwin32.sourceforge.net/packages/grep.htm). Worthwelle 5 лет назад 0

1 ответ на вопрос

1
Attie

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


XPath может получить то, что вы хотите - он был разработан специально для этого:

//a/@href 

Затем, чтобы использовать XPath с xmllint(другие утилиты будут существовать):

xmllint --shell --html file.html <<<'cat //a/@href' 

Это даст вам кучу вещей, в том числе prompts ( / >), имя атрибута ( href="...") и разделители ( -------) ... так что отфильтруйте их, отсортируйте и получите список уникальных URL:

xmllint --shell --html file.html <<<'cat //a/@href' \ | sed '/^ href="/!d;s/^ href="//;s/"$//' \ | sort \ | uniq 

Все без grep.

Здесь мы используем sedдля:

  1. /^ href="/!d - удалить все строки, которые не соответствуют регулярному выражению ^ href="
  2. s/^ href="// - отрывать префикс
  3. s/"$// - убрать суффикс

В качестве альтернативы вы можете использовать CSS-селекторы вместо XPath с помощью tq(проект Python):

tq 'a' -a href < file.html 

Примечание: после обсуждения grepя предположил Unix ... Если у вас есть Cygwin или WSL, то это, вероятно, будет работать там же.

xmllint(утилита из libxml2 ) имеет выпуск Windows.

Похожие вопросы