Làm thế nào để tải xuống với wget mà không cần theo các liên kết với các tham số


7

Tôi đang cố tải xuống hai trang web để đưa vào CD:

http://boinc.berkeley.edu/trac/wiki
http://www.boinc-wiki.info

Vấn đề tôi gặp phải là cả hai đều là wiki. Vì vậy, khi tải xuống với ví dụ:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif http://www.boinc-wiki.info/

Tôi nhận được rất nhiều tệp vì nó cũng theo các liên kết như ...? Action = chỉnh sửa ...? Action = diff & version = ...

Có ai biết một cách để khắc phục điều này?

Tôi chỉ muốn các trang hiện tại, không có hình ảnh và không có khác biệt, v.v.

Tái bút

wget -r -k -np -nv -l 1 -R jpg,jpeg,png,gif,tif,pdf,ppt http://boinc.berkeley.edu/trac/wiki/TitleIndex

Điều này làm việc cho ber ở nhưng boinc-wiki.info vẫn gây rắc rối cho tôi: /

PPS:

Tôi đã nhận được những gì dường như là các trang có liên quan nhất với:

wget -r -k -nv  -l 2 -R jpg,jpeg,png,gif,tif,pdf,ppt http://www.boinc-wiki.info

Không cần phải đăng chéo giữa superuser và serverfault superuser.com/questions/158318/ Khăn
Bryan

Tôi nên đăng nó ở đâu?
Tie-Fighter

Câu trả lời:


7
wget --reject-regex '(.*)\?(.*)' http://example.com

( --reject-type posixtheo mặc định). Tuy nhiên, chỉ hoạt động cho các phiên bản (> = 1.14) gần đây wget, theo các bình luận khác.

Coi chừng rằng dường như bạn chỉ có thể sử dụng --reject-regexmột lần cho mỗi wgetcuộc gọi. Đó là, bạn phải sử dụng |trong một regex duy nhất nếu bạn muốn chọn trên một số regex:

wget --reject-regex 'expr1|expr2|…' http://example.com

2
Regex trong wget không được neo ở đầu hoặc cuối, vì vậy trong ví dụ đầu tiên của bạn wget --reject-regex '\?' http://example.comlà đủ.
Stéphane Gourichon

4

Các tài liệu cho wget nói:

Cũng lưu ý rằng các chuỗi truy vấn (chuỗi ở cuối URL bắt đầu bằng dấu chấm hỏi ('?') Không được bao gồm như một phần của tên tệp cho quy tắc chấp nhận / từ chối, mặc dù những chuỗi này thực sự sẽ đóng góp cho tên được chọn cho tệp cục bộ. Dự kiến ​​phiên bản tương lai của Wget sẽ cung cấp tùy chọn cho phép khớp với các chuỗi truy vấn.

Có vẻ như chức năng này đã ở trên bàn một lúc và không có gì được thực hiện với nó.

Tôi chưa sử dụng nó, nhưng omerack có vẻ như nó có tính năng lọc mạnh mẽ hơn so với wget và có thể phù hợp hơn với những gì bạn đang tìm kiếm (đọc về các bộ lọc ở đây http://www.httrack.com/html /fcguide.html ).


+1 để chỉ cho tôi đến omerack. Có vẻ tốt hơn sau đó wget, và wget đang trông trì trệ.
Stefan Lasiewski

Tôi đã thử Winhttrack nhưng nó hoạt động rất buồn cười. Nó tải xuống các tập tin và duyệt qua các thư mục mà nó không nên: /
Tie-Fighter

Có thể một ngày nào đó wget sẽ được sửa chữa. Cho đến bây giờ cả Olerack và pavuk đều trông ổn.
joeytwiddle

3

Phiên bản mới của wget (v.1.14) giải quyết tất cả những vấn đề này.

Bạn phải sử dụng tùy chọn mới --reject-regex=....để xử lý các chuỗi truy vấn.

Lưu ý rằng tôi không thể tìm thấy hướng dẫn mới bao gồm các tùy chọn mới này, vì vậy bạn phải sử dụng lệnh trợ giúp wget --help > help.txt


1

Pavuk sẽ có thể làm điều đó:

http://pavuk.sourceforge.net/man.html#sect39

Ví dụ về Mediawiki:

[...]

-skip_url_potype ' oldid = , action = edit , action = history , diff = , limit = , [/ =] User : , [/ =] User_talk : , [^ p] / Special : , = Special: [^ R] , .php / Đặc biệt: [^ LUA] [^ onl] [^ nul] , MediaWiki : , Tìm kiếm : , Trợ giúp: '

[...]


1

Có vẻ như bạn đang cố gắng tránh tải xuống các trang đặc biệt của MediaWiki. Tôi đã giải quyết vấn đề này một khi tránh index.phptrang:

wget  -R '*index.php*'  -r ... <wiki link>

Tuy nhiên, wiki đã sử dụng URLS như đã thấy trong Wikipedia ( http://<wiki>/en/Theme) chứ không phải mẫu tôi đã thấy ở những nơi khác ( http://<wiki>/index.php?title=Theme). Vì liên kết bạn đã sử dụng URL trong mẫu Wikipedia, tôi nghĩ rằng giải pháp này cũng có thể phù hợp với bạn.


0

'-R rejlist - từ chối danh sách' Chỉ định danh sách các hậu tố hoặc mẫu tệp được phân tách bằng dấu phẩy để chấp nhận hoặc từ chối (xem Loại tệp). Lưu ý rằng nếu bất kỳ ký tự đại diện nào, '*', '?', '[' Hoặc ']', xuất hiện trong một yếu tố của danh sách hoặc danh sách từ chối, thì nó sẽ được coi là một mẫu, thay vì hậu tố.

Mẫu có lẽ là những gì bạn muốn. Tôi không chắc mẫu phức tạp đến mức nào nhưng bạn có thể cố gắng chỉ chấp nhận một số tệp hoặc khối nhất định:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif,*\? http://www.boinc-wiki.info/

Chấp nhận:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif -A [a-zA-Z.] http://www.boinc-wiki.info/

Chỉnh sửa: nvm trong ánh sáng của bài khác.


Điều này hoạt động trên chuỗi truy vấn? Mọi phiên bản wget tôi đã sử dụng chỉ áp dụng các mẫu danh sách từ chối cho phần tệp của URL. Tôi sẽ cho nó một shot và xem.
Evan Anderson

Tôi đã không kiểm tra nó. Tôi chỉ tra cứu tài liệu. Tôi đã tìm thấy nó sử dụng quy ước shell, nhưng kinh nghiệm của bạn sẽ nói nhiều hơn của tôi về chức năng làm việc của kết hợp.
Joshua Enfield

Thoát khỏi "?" dường như không muốn làm những gì OP muốn trên hộp CentOS 5.3 của tôi đang chạy wget 1.11.4.
Evan Anderson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.