Làm cách nào để lấy nội dung của trang web trong biến shell?


115

Trong Linux, làm cách nào để tôi có thể tìm nạp một URL và lấy nội dung của nó trong một biến trong shell script?

Câu trả lời:


189

Bạn có thể sử dụng wgetlệnh để tải trang xuống và đọc nó thành một biến dưới dạng:

content=$(wget google.com -q -O -)
echo $content

Chúng tôi sử dụng -Otùy chọn wgetcho phép chúng tôi chỉ định tên của tệp để wgetlưu nội dung trang vào đó . Chúng tôi chỉ định -đưa kết xuất vào đầu ra tiêu chuẩn và thu thập dữ liệu đó vào biến content. Bạn có thể thêm -qtùy chọn yên tĩnh để tắt đầu ra tiện ích.

Bạn cũng có thể sử dụng lệnh curl cho việc này như:

content=$(curl -L google.com)
echo $content

Chúng tôi cần sử dụng -Ltùy chọn vì trang chúng tôi yêu cầu có thể đã di chuyển. Trong trường hợp đó, chúng tôi cần lấy trang từ vị trí mới. Các -Lhoặc --locationtùy chọn giúp chúng ta với điều này.


Đây là một thủ thuật thực sự gọn gàng. Tôi gọi một tập lệnh shell thông qua một tập lệnh php trên máy chủ proxy. Khi được hỏi, máy chủ proxy bật các máy chủ đắt tiền sẽ tự tắt sau 2 giờ. Tôi cần đầu ra từ wget cho đầu ra chuẩn để cung cấp trở lại bản ghi bảng điều khiển Jenkins.
Dennis

tôi vẫn chưa hiểu điều này ... ai đó có thể phân tích về cách làm, ví dụ. lấy thẻ img trong một biến cho liên kết này www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108

@ juggernaut1996: đó phải là một câu hỏi riêng. Tóm lại, bạn cần phải tải trang, trích xuất các srcthuộc tính của phần tử đúng, sau đó tải rằng trang. Nếu bạn cài đặt TQ , lệnh này nên làm điều đó:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pyrocrasty

Phiên bản Wget 1.14 không chấp nhận convert_links = onvới -O-tùy chọn. Nó không thành công với lỗi -k can be used together with -O only if outputting to a regular file.. Nó có được mong đợi không?
Prasad Bonthu

28

Có nhiều cách để lấy một trang từ dòng lệnh ... nhưng nó cũng tùy thuộc vào việc bạn muốn nguồn mã hay chính trang đó:

Nếu bạn cần mã nguồn:

với cuộn:

curl $url

với wget:

wget -O - $url

nhưng nếu bạn muốn nhận được những gì bạn có thể thấy bằng trình duyệt, lynx có thể hữu ích:

lynx -dump $url

Tôi nghĩ rằng bạn có thể tìm thấy rất nhiều giải pháp cho vấn đề nhỏ này, có lẽ bạn nên đọc tất cả các trang hướng dẫn cho các lệnh đó. Và đừng quên thay thế $urlbằng URL của bạn :)

Chúc may mắn :)



3
content=`wget -O - $url`

@rjack: (Tuy nhiên, bài viết bạn liên kết với không làm cho một trường hợp tốt đẹp cho $ ...) cú pháp (.)
Jim Lewis

3

Nếu bạn đã cài đặt LWP , nó cung cấp một tệp nhị phân có tên đơn giản là " GET ".

$ NHẬN http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Chuyển tiếp // EN">
<HTML>
<HẾT>
  <META http-equiv = "Content-Type" content = "text / html; charset = utf-8">
  <TITLE> Trang web mẫu </TITLE>
</HEAD> 
<body>  
<p> Bạn đã truy cập trang web này bằng cách nhập & quot; example.com & quot ;,
& quot; example.net & quot ;, & quot; example.org & quot
  hoặc & quot; example.edu & quot; vào trình duyệt web của bạn. </p>
<p> Những tên miền này được dành riêng để sử dụng trong tài liệu và không có sẵn 
  để đăng ký. Xem <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, Phần 3. </p>
</BODY>
</HTML>

wget -O-, curllynx -sourcehành xử tương tự.


2

Bạn có thể sử dụng curlhoặc wgetđể lấy dữ liệu thô, hoặc bạn có thể sử dụng w3m -dumpđể trình bày văn bản đẹp của một trang web.

$ foo=$(w3m -dump http://www.example.com/); echo $foo
You have reached this web page by typing "example.com", "example.net","example.org" or "example.edu" into your web browser. These domain names are reserved for use in documentation and are not available for registration. See RFC 2606, Section 3.
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.