Làm cách nào để lấy văn bản của một trang bằng wget mà không có html?


17

Nếu tôi thử wget trên một trang web, tôi sẽ nhận được trang dưới dạng html. Có thể chỉ truy xuất văn bản của một tệp mà không có html liên quan? (Điều này là bắt buộc đối với tôi vì một số trang HTML chứa chương trình c đang được tải xuống bằng thẻ html. Tôi phải mở nó trong trình duyệt và sao chép thủ công văn bản để tạo tệp .c.)


1
Trên thực tế là có thể, nhưng bạn cần phải viết một số chức năng sẽ phân tích mã từ trang và lưu nó dưới dạng .c. Nó không khó, nhưng nó phụ thuộc vào cấu trúc trang. Nếu bạn cung cấp một liên kết có thể ai đó sẽ giúp bạn với mã chính xác. Nếu không sedhoặc perllà bạn bè của bạn.
vội vàng

Câu trả lời:


26

wgetsẽ chỉ lấy tài liệu. Nếu tài liệu ở dạng HTML, điều bạn muốn là kết quả của việc phân tích cú pháp tài liệu.

Bạn có thể, ví dụ, sử dụng lynx -dump -nolist, nếu bạn có lynx xung quanh.

lynxlà một trình duyệt web đơn giản, nhẹ, có -dumptính năng, được sử dụng để xuất kết quả của quá trình phân tích cú pháp. -nolisttránh danh sách các liên kết ở cuối, nó sẽ xuất hiện nếu trang có bất kỳ siêu liên kết nào.

Như được đề cập bởi @Thor, elinkscũng có thể được sử dụng cho việc này, vì nó cũng có một -dumptùy chọn (và -no-referencesphải bỏ qua danh sách các liên kết). Nó có thể đặc biệt hữu ích nếu bạn đi ngang qua một số trang web bằng cách sử dụng các khung hình cao (MTFBWY).

Ngoài ra, hãy nhớ rằng, trừ khi trang thực sự chỉ là mã C với các thẻ HTML, bạn sẽ cần kiểm tra kết quả, chỉ để đảm bảo không có gì nhiều hơn mã C ở đó.


5

Nếu bạn chưa cài đặt các công cụ khác này, chỉ có wget và trang không có định dạng chỉ là văn bản và liên kết đơn giản, ví dụ mã nguồn hoặc danh sách các tệp, bạn có thể tách HTML bằng cách sử dụng sed như thế này:

wget -qO- http://address/of/page/you/want/to/view/ | sed -e 's/<[^>]*>//g'

Điều này sử dụng wget để chuyển nguồn của trang sang STDOUT và sed để loại bỏ bất kỳ cặp <> nào và bất cứ thứ gì giữa chúng.

Sau đó, bạn có thể chuyển hướng đầu ra của lệnh sed sang tệp bạn muốn tạo bằng cách sử dụng>:

wget -qO- http://.../ | sed -e 's/<[^>]*>//g' > downloaded_file.txt

Lưu ý: Bạn có thể thấy rằng nó có thêm khoảng trắng trong tệp mà bạn không muốn (ví dụ: các dòng được thụt vào một vài cột)

Có thể dễ dàng nhất để sử dụng trình soạn thảo văn bản của bạn để dọn dẹp tệp đó (hoặc một trình định dạng nguồn khi bạn đang tải xuống mã nguồn C).

Nếu bạn cần thực hiện cùng một điều đơn giản cho mỗi dòng của tệp, bạn có thể bao gồm một lệnh để thực hiện điều đó trong lệnh sed (ở đây tước một khoảng trắng hàng đầu):

wget -qO- http://.../ | sed -e 's/<[^>]*>//g;s/^ //g' > downloaded_stripped_file.txt

3

chỉ để thêm một công cụ khác. Tôi thích w3m, đó là một lynxtrình duyệt giao diện điều khiển. Bạn có thể muốn kiểm tra những gì đã có sẵn trên hệ thống của bạn.

w3m -dump website.html
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.