Извлечение гиперссылок со страницы с помощью wget и grep - PullRequest
1 голос
/ 19 мая 2019

Я пытаюсь извлечь все гиперссылки на одной странице, используя wget и grep, и я нашел этот код, используя PCRE, чтобы получить все гиперссылки.

Но я не очень знаком с regex или html, поэтому я действительно хочу знать, является ли это разумным способом решения этой проблемы или есть лучший способ. У меня тоже есть вопрос по этому поводу. Вам действительно нужно избегать цитат? Я проверял это несколько раз, но, похоже, ничего не изменилось.

wget https://google.com -q -O - | grep -Po '(?<=href=\")[^\"]*'

Любая помощь будет оценена!

1 Ответ

1 голос
/ 19 мая 2019

Ваша команда будет захватывать содержимое всех строк href href="...", которые полностью существуют в одной строке.

Вам не нужно индивидуально экранировать двойные кавычки \", если вся строка окружена 'single quotes'. Смысл цитирования состоит в том, чтобы предотвратить интерпретацию символов оболочкой. Единственный раз, когда вам нужно экранировать двойные кавычки, это когда вы разрешаете расширения, например ::10000

foo=href
grep -Po "(?<=${foo}=\")[^\"]*"

Это точно идентично

grep -Po '(?<=href=")[^"]*'

Что означает

  • Grep, используя P CRE
  • возврат o только совпадение
  • ищите любую строку, которой предшествует (?<=...) буквенная строка href="
  • соответствует всему, что не является двойной кавычкой [^"]
  • ноль или более раз *

Использование * может вернуть пустую строку, если вы когда-нибудь проанализируете <a href="">. Вы можете использовать + (один или несколько раз) вместо * (ноль или более раз).

...