패턴과 일치하는 URL을 크롤링하지 않도록 wget에 지시하시겠습니까?

패턴과 일치하는 URL을 크롤링하지 않도록 wget에 지시하시겠습니까?

내 웹사이트가 스파이더에 의해 크롤링될 때 어떻게 작동하는지 테스트하고 싶습니다. 그러나 "페이지"라는 단어가 포함된 모든 URL을 제외하고 싶습니다. 나는 시도했다:

$ wget -r -R "*page*" --spider --no-check-certificate -w 1 http://mysite.com/

-R플래그는 '페이지'라는 단어가 포함된 URL 패턴을 거부해야 합니다. 하지만 작동하지 않는 것 같습니다.

Spider mode enabled. Check if remote file exists.
--2014-06-10 12:34:56--  http://mysite.com/?sort=post&page=87729
Reusing existing connection to [mysite.com]:80.
HTTP request sent, awaiting response... 200 OK

이러한 URL이 스파이더에 의해 크롤링되지 않도록 제외하는 방법은 무엇입니까?

답변1

--reject-regex몇 번의 시행착오 끝에 저는 다음과 같이 사용하는 것이 해결책이라는 것을 깨달았습니다.

wget -r --reject-regex page --spider --no-check-certificate -w 1 http://mysite.com/

urlregex에는 와일드카드가 포함되어서는 안 되므로 *page*효과가 없지만 page효과가 있습니다.

답변2

에서 man wget:

-R rejlist --reject rejlist
           Specify comma-separated lists of file name suffixes or patterns to
           accept or reject.

이 옵션은 거부만 수행됩니다.문서패턴과 일치합니다.

page엄밀히 말하면 경로의 마지막 부분(예: 파일 이름)이 아닌 URL에 요청 매개변수가 있습니다 .


wget에서 찾은 모든 URL을 덤프하고(예: 다운로드한 모든 URL의 로그를 grep), 요구 사항을 충족하지 않는 URL을 제거하고(예: grep -v 사용) 마지막으로 wget에서 나머지 URL을 검색하도록 할 수 있습니다. 예를 들어:

# dump the whole website
wget ... -P dump -o wget.log  ...

# extract URLs from the log file
cat wget.log | grep http | tr -s " " "\012" | grep http >urls

# excludes URLs with the word page anywhere in it
cat urls | grep -v page >urls 

# delete previous dump, since it probably contains unwanted files
rm -rf dump

# Fetch URLs
cat urls | xargs wget -x

필요에 따라 다른 wget 옵션(예: --no-check-certificate)을 추가해야 할 수도 있습니다.

관련 정보