Wget은 재귀적으로 다운로드되지 않습니다.

Wget은 재귀적으로 다운로드되지 않습니다.

다음 디렉토리 구조를 사용하여 포럼 게시물을 복사하려고 합니다.

첫 번째 페이지의 URL은 다음과 같습니다.

https://some.site.com/foo/bar/threadNumber

나머지 페이지는 다음 형식을 따릅니다.

https://some.site.com/foo/bar/threadNumber/page/2
https://some.site.com/foo/bar/threadNumber/page/3
https://some.site.com/foo/bar/threadNumber/page/*

나는 다음 명령을 사용하고 있습니다 :

wget --recursive --page-requisites --adjust-extension --no-parent --convert-links https://some.site.com/foo/bar/threadNumber

이 명령은 단일 URL을 복사하는 데 효과적입니다. 그러나 나는 더 높은 디렉토리에 넣고 모든 /page/*파일을 얻고 싶습니다. 더 높은 디렉토리는 필요하지 않고 /page/더 낮은 파일만 필요합니다. 저도 참여했는데 --mirror성사되지 않았습니다.

이 명령이 페이지의 나머지 부분 다운로드 속도를 늦추지 않는 이유를 알고 계십니까?

답변1

보안 검사를 통해 링크를 반복적으로 다운로드하면 순환 리디렉션이 발생할 수 있습니다.

귀하의 웹 사이트가 wget을 혼동시키는 이중 리디렉션을 사용하기 때문에 이 명령은 작동하지 않습니다. --debug이 옵션으로 무엇을 호출할 수 있는지에 대한 자세한 로그를 살펴보겠습니다 (관련 없는 줄은 제거됨).

---request begin---
GET /<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/auth/securityCheck?action=bounce&referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL>
(...)
---request begin---
GET /auth/securityCheck?referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/<URL>
(...)
Deciding whether to enqueue "https://community.lego.com/<URL>".
Already on the black list.
Decided NOT to load it.
Redirection "https://community.lego.com/<URL>" failed the test.

표시된 대로 요청을 일부 "보안 검사"로 대체하고 반환합니다. Wget은 원래 페이지와 동일한 페이지로 두 번째 리디렉션을 원하지 않으며 이를 블랙리스트로 간주하여 링크를 따라갈 수 없습니다.

보안 검사 리디렉션이 발생하지 않도록 쿠키 마법을 수행하는 방법이 분명히 있지만 그 방법을 모르겠습니다.

그러나 원하는 경우재컴파일수동 wget을 사용하면 문제에 대한 해결책은 간단할 수 있습니다. src/recur.c.

            status = retrieve_url (url_parsed, url, &file, &redirected, referer,
                                   &dt, false, i, true);
+
+         if (redirected)
+                 hash_table_remove (blacklist, url);

            if (html_allowed && file && status == RETROK
                && (dt & RETROKF) && (dt & TEXTHTML))

이렇게 하면 리디렉션될 때마다 블랙리스트에서 현재 페이지가 제거되어 문제가 해결됩니다.

경우에 따라 무한 루프가 발생할 수 있으므로 커밋 가능한 패치가 아닙니다.

wget을 다시 빌드한 후에는 이와 같은 것을 사용하여 wget -np -nd -r -k -p <url> 예상대로 전체 스레드를 얻을 수 있습니다.

답변2

이 시도:

wget -nv --mirror --span-hosts --convert-links --adjust-extension --page-requisites --no-parent https://some.site.com/foo/bar/threadNumber

이 명령은 모든 사이트의 모든 요소를 ​​포함하는 전체 스레드를 가져옵니다. --accept html,gif,png,jpg,jpeg예를 들어 유형별로 제한할 수 있습니다.

답변3

여기서 큰 소리로 생각해보세요...webhttrack과 같은 것은 어떻습니까? 아니면 먼저 jmeter를 실행하고 -> 연결된 목록을 내보내고 -> wget이나 컬을 사용하시겠습니까?

고쳐 쓰다 방금 webhttrack으로 테스트했는데 CLI와 Gui에서 작동하고 사용할 수 있습니다.

관련 정보