grep을 사용하고 스크립트를 삽입하여 HTML 파일에서 웹사이트 URL을 얻는 방법

grep을 사용하고 스크립트를 삽입하여 HTML 파일에서 웹사이트 URL을 얻는 방법

HTML 파일에서 URL을 추출하기 위해 grep과 cut을 사용하려고 합니다. 링크는 다음과 같습니다:

<a href="http://examplewebsite.com/">

다른 사이트에도 있지만 .net미리 .gov컷오프 포인트를 설정할 수 있을 줄 알았습니다 >. 그래서 나는 grep과 cut을 사용하여 http 이전과 .com 이후의 모든 것을 어떻게든 차단할 수 있다는 것을 알고 있지만 한동안 이 문제에 갇혀 있었습니다.

답변1

도구가 제한되어 있는지 확실하지 않습니다.

그러나 위에서 언급한 것처럼 정규식은 최선의 방법이 아닐 수도 있지만 다음은 제가 정리한 예입니다.

cat urls.html | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | sort -u
  • grep -E: egrep과 동일
  • grep -o: grep된 내용만 출력
  • (http|https):는/이거나
  • a-z: 모두 소문자
  • A-Z: 모두 대문자
  • .: 예
  • /: 슬래시입니다
  • ?: 예?
  • =: 등호입니다
  • _: 밑줄입니다
  • %: 퍼센트 기호입니다
  • ::는 콜론이다
  • -: 대시입니다
  • *: 반복 [...] 그룹
  • sort -u: 모든 중복 항목을 정렬하고 제거합니다.

산출:

bob@bob-NE722:~s$  wget -qO- https://stackoverflow.com/ | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" | sort -u
https://stackauth.com
https://meta.stackoverflow.com
https://cdn.sstatic.net/Img/svg-icons
https://stackoverflow.com
https://www.stackoverflowbusiness.com/talent
https://www.stackoverflowbusiness.com/advertising
https://stackoverflow.com/users/login?ssrc=head
https://stackoverflow.com/users/signup?ssrc=head
https://stackoverflow.com
https://stackoverflow.com/help
https://chat.stackoverflow.com
https://meta.stackoverflow.com
...

\d추가하여 다른 숫자 유형을 캡처 할 수도 있습니다 .

답변2

댓글에서 말했듯이, HTML을 구문 분석하기 위해 정규 표현식을 사용하는 것은 일반적으로 좋은 생각이 아니지만, 구문 분석 중인 HTML이 제대로 작동한다면 때로는 이를 사용하지 않아도 됩니다.

href요소의 속성에서 URL 만 가져오려면 <a>여러 단계를 거쳐 수행하는 것이 가장 쉬운 방법이라는 것을 알았습니다. 귀하의 의견에 따르면 전체 URL이 아닌 최상위 도메인 이름만 원하는 것 같습니다. 이 경우 다음과 같이 사용할 수 있습니다.

grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' | 
grep -Eo '(http|https)://[^/"]+'

source.html구문 분석할 HTML 코드가 포함된 파일입니다 .

href이 코드는 각 행에 있는 모든 요소의 속성으로 나타나는 모든 최상위 URL을 인쇄합니다 . 첫 번째 명령에 대한 옵션은 <a>해당 명령이 및 요소에 적용되는지 확인하는 것입니다. 대문자 속성인 OTOH를 캡처하기 위해 두 번째 속성을 제공할 수도 있습니다. 저는 이 손상된 HTML을 무시하는 것이 좋습니다. :)-igrep<a><A>-igrepHREF

콘텐츠 처리 중http://google.com/

wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' | 
grep -Eo 'href="[^\"]+"' | 
grep -Eo '(http|https)://[^/"]+'

산출

http://www.google.com.au
http://maps.google.com.au
https://play.google.com
http://www.youtube.com
http://news.google.com.au
https://mail.google.com
https://drive.google.com
http://www.google.com.au
http://www.google.com.au
https://accounts.google.com
http://www.google.com.au
https://www.google.com
https://plus.google.com
http://www.google.com.au

호주 Google 페이지로 리디렉션되면 출력이 다른 예와 약간 다릅니다.

답변3

grep이 Perl 정규식을 지원하는 경우:

grep -Po '(?<=href=")[^"]*(?=")'
  • (?<=href=")그리고 (?=")주위를 둘러보세요속성의 표현입니다 href. 여기에는 -P선택이 필요합니다.
  • -o일치하는 텍스트를 인쇄합니다.

예를 들어:

$ curl -sL https://www.google.com | grep -Po '(?<=href=")[^"]*(?=")'
/search?
https://www.google.co.in/imghp?hl=en&tab=wi
https://maps.google.co.in/maps?hl=en&tab=wl
https://play.google.com/?hl=en&tab=w8
https://www.youtube.com/?gl=IN&tab=w1
https://news.google.co.in/nwshp?hl=en&tab=wn
...

항상 그렇듯이 이것이 유효한 URI인지 또는 구문 분석 중인 HTML이 유효한지 보장할 수 없습니다.

답변4

여기서 해결책을 찾았습니다IMHO 이것은 여기서 제안한 것보다 훨씬 간단하고 아마도 더 빠를 것입니다. https 파일을 지원하기 위해 몇 가지 조정을 했습니다. 하지만 TD;TR 버전은...

추신: 사이트 URL을 파일 경로로 바꿀 수 있으며 효과는 동일합니다.

lynx -dump -listonly -nonumbers "http://www.goggle.com" > links.txt

lynx -dump -listonly -nonumbers "some-file.html" > links.txt

링크를 파일에 저장하는 대신 링크만 보고 싶다면 다음을 시도해 보세요.

lynx -dump -listonly -nonumbers "http://www.google.com"

lynx -dump -listonly -nonumbers "some-file.html"

결과는 다음과 유사할 것입니다...

http://www.google.ca/imghp?hl=en&tab=wi
http://maps.google.ca/maps?hl=en&tab=wl
https://play.google.com/?hl=en&tab=w8
http://www.youtube.com/?gl=CA&tab=w1
http://news.google.ca/nwshp?hl=en&tab=wn
https://mail.google.com/mail/?tab=wm
https://drive.google.com/?tab=wo
https://www.google.ca/intl/en/options/
http://www.google.ca/history/optout?hl=en
...
etc.

내 사용 사례에서는 이것이 잘 작동합니다. 하지만 요즘에는 사람들이 라이브러리의 CDN URI에 src="//blah.tld"와 같은 링크를 추가한다는 점에 유의하세요. 검색된 링크에서 해당 내용을 보고 싶지 않습니다.

"lynx -dump"는 기본적으로 특정 페이지에서 클릭 가능한 모든 링크를 추출하므로 href 또는 기타 링크 소스를 확인하려고 할 필요가 없습니다. 따라서 나중에 해야 할 유일한 일은 "lynx -dump"의 결과를 grep으로 구문 분석하여 동일한 결과의 더 깨끗한 원시 버전을 얻는 것입니다.

관련 정보