Использование awk sed или grep для анализа URL-адресов из источника веб-страницы - PullRequest
4 голосов
/ 20 марта 2011

Я пытаюсь разобрать источник загруженной веб-страницы, чтобы получить список ссылок. Однострочник будет работать нормально. Вот что я пробовал до сих пор:

Похоже, что некоторые URL-адреса не включены в часть URL.

$ cat file.html | grep -o -E '\b(([\w-]+://?|domain[.]org)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))'|sort -ut/ -k3

Это получает все URL, но я не хочу включать ссылки, которые имеют / являются якорными ссылками. Также я хочу иметь возможность указать домен.org/folder/:

$ awk 'BEGIN{
RS="</a>"
IGNORECASE=1
}
{
  for(o=1;o<=NF;o++){
    if ( $o ~ /href/){
      gsub(/.*href=\042/,"",$o)
      gsub(/\042.*/,"",$o)
      print $(o)
    }
  }
}' file.html

Ответы [ 2 ]

8 голосов
/ 20 марта 2011

Если вы анализируете только что-то вроде тегов , вы можете просто сопоставить атрибут href следующим образом:

$ cat file.html | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | sort | uniq

Это будет игнорировать привязку, а также гарантирует, что у вас есть уникальность.Это предполагает, что страница имеет правильно сформированный (X) HTML, но вы могли бы сначала пройти через Tidy.

2 голосов
/ 21 марта 2011
lynx -dump http://www.ibm.com

И найдите строку «Ссылки» в выходных данных.Постобработка с sed, если вам нужно.

Использование другого инструмента иногда упрощает работу.Время от времени, другой инструмент делает работу просто.Это один из тех времен.

...