development

웹 사이트를 스파이더 링하고 URL 만 반환

big-blog 2020. 12. 25. 22:43
반응형

웹 사이트를 스파이더 링하고 URL 만 반환


웹 사이트를 의사 스파이더하는 방법을 찾고 있습니다. 핵심은 실제로 콘텐츠가 아니라 간단한 URI 목록을 원한다는 것입니다. 옵션을 사용하여 Wget을 사용하면 이 아이디어에 상당히 가까워 질 수 --spider있지만을 통해 해당 출력을 파이핑 할 때 grep제대로 작동하는 마법을 찾을 수없는 것 같습니다.

wget --spider --force-html -r -l1 http://somesite.com | grep 'Saving to:'

grep필터는 전혀상의 영향이없는 것으로 보인다 wget출력. 내가 뭔가 잘못되었거나 이런 종류의 제한된 결과 집합을 제공하는 데 더 적합한 다른 도구가 있습니까?

최신 정보

그래서 오프라인에서 기본적 wget으로 stderr에 쓰는 것을 알았습니다 . 나는 man 페이지에서 그것을 놓쳤습니다 (사실, 그것이 거기에 있다면 여전히 그것을 찾지 못했습니다). 반환 값을 stdout으로 파이프하면 필요한 것에 더 가까워졌습니다.

wget --spider --force-html -r -l1 http://somesite.com 2>&1 | grep 'Saving to:'

나는 여전히 이런 종류의 일을하는 다른 / 더 나은 방법에 관심이 있습니다.


내가하고 싶은 절대 마지막 일은 모든 콘텐츠를 직접 다운로드하고 파싱하는 것입니다 (예 : 나만의 스파이더 생성). Wget이 기본적으로 stderr에 쓰는 것을 알았을 때 stdout으로 리디렉션하고 출력을 적절하게 필터링 할 수있었습니다.

wget --spider --force-html -r -l2 $url 2>&1 \
  | grep '^--' | awk '{ print $3 }' \
  | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' \
  > urls.m3u

이렇게하면 스파이더 링 된 콘텐츠 리소스 (이미지, CSS 또는 JS 소스 파일이 아닌 리소스) URI 목록이 표시됩니다. 거기에서 내 요구 사항을 처리하기 위해 URI를 타사 도구로 보낼 수 있습니다.

출력은 여전히 ​​약간 능률화되어야하지만 (위에 표시된 것처럼 중복이 생성됨) 거의 다 왔으며 직접 구문 분석을 수행 할 필요가 없습니다.


모두에서 주소를 추출하기 위해 몇 가지 정규식을 만듭니다.

<a href="(ADDRESS_IS_HERE)">.

내가 사용할 솔루션은 다음과 같습니다.

wget -q http://example.com -O - | \
    tr "\t\r\n'" '   "' | \
    grep -i -o '<a[^>]\+href[ ]*=[ \t]*"\(ht\|f\)tps\?:[^"]\+"' | \
    sed -e 's/^.*"\([^"]\+\)".*$/\1/g'

웹 페이지에서 모든 http, https, ftp 및 ftps 링크를 출력합니다. 상대 URL이 아니라 전체 URL 만 제공합니다.

일련의 파이프 명령에 사용되는 옵션에 대한 설명 :

wget -q는 과도한 출력이 발생하지 않도록합니다 (자동 모드). wget -O-다운로드 한 파일이 디스크에 저장되지 않고 stdout에 에코되도록합니다.

tr은이 예제에서 줄 바꿈과 탭을 공백으로 변환하고 작은 따옴표를 큰 따옴표로 변환하여 정규식을 단순화하는 데 사용되는 유닉스 문자 변환기입니다.

grep -i는 검색 대소 문자를 구분하지 않습니다. grep -o는 일치하는 부분 만 출력합니다.

sed는 필터링 및 변환 작업을 허용하는 Stream EDitor 유닉스 유틸리티입니다.

sed -e는 표현식을 제공 할뿐입니다.

" http://craigslist.org " 에서이 작은 스크립트를 실행하면 상당히 긴 링크 목록이 생성되었습니다.

http://blog.craigslist.org/
http://24hoursoncraigslist.com/subs/nowplaying.html
http://craigslistfoundation.org/
http://atlanta.craigslist.org/
http://austin.craigslist.org/
http://boston.craigslist.org/
http://chicago.craigslist.org/
http://cleveland.craigslist.org/
...

xidel 이라는 도구를 사용했습니다.

xidel http://server -e '//a/@href' | 
grep -v "http" | 
sort -u | 
xargs -L1 -I {}  xidel http://server/{} -e '//a/@href' | 
grep -v "http" | sort -u

약간 엉망이지만 더 가까이 다가갑니다! 이것은 단지 첫 번째 수준입니다. 이것을 자체 재귀 스크립트로 압축한다고 상상해보십시오!

참조 URL : https://stackoverflow.com/questions/2804467/spider-a-website-and-return-urls-only

반응형