웹 사이트를 스파이더 링하고 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
'development' 카테고리의 다른 글
Java jar 파일에서 리소스 파일을 어떻게 읽습니까? (0) | 2020.12.25 |
---|---|
Sysinternals의 Portmon : 오류 2 (0) | 2020.12.25 |
AutoMapper의 대안 (0) | 2020.12.25 |
ggplot 범례에서 선 색상 및 선 유형 제어 (0) | 2020.12.25 |
라이브 Android 오디오를 서버로 스트리밍 (0) | 2020.12.25 |