จะรับเนื้อหาของเว็บเพจในตัวแปรเชลล์ได้อย่างไร


115

ใน Linux ฉันจะดึง URL และรับเนื้อหาในตัวแปรในเชลล์สคริปต์ได้อย่างไร

คำตอบ:


189

คุณสามารถใช้wgetคำสั่งเพื่อดาวน์โหลดเพจและอ่านเป็นตัวแปรดังนี้:

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

เราใช้-Oตัวเลือกwgetที่ช่วยให้เราระบุชื่อของไฟล์ที่จะwgetทิ้งเนื้อหาของหน้า เราระบุจะได้รับการถ่ายโอนข้อมูลไปยังออกมาตรฐานและเก็บที่เป็นตัวแปร- contentคุณสามารถเพิ่ม-qตัวเลือกเงียบเพื่อปิดเอาต์พุต wget

คุณสามารถใช้คำสั่งcurlสำหรับสิ่งนี้ได้เช่นกัน:

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

เราจำเป็นต้องใช้-Lตัวเลือกนี้เนื่องจากเพจที่เราขออาจมีการย้าย ในกรณีนี้เราจำเป็นต้องได้รับเพจจากตำแหน่งใหม่ -Lหรือ--locationตัวเลือกที่ช่วยให้เรามีนี้


นี่เป็นเคล็ดลับที่ประณีตจริงๆ ฉันเรียกใช้เชลล์สคริปต์ผ่านสคริปต์ php บนพร็อกซีเซิร์ฟเวอร์ เมื่อถูกถามพร็อกซีเซิร์ฟเวอร์จะเปิดเซิร์ฟเวอร์ราคาแพงซึ่งปิดตัวเองหลังจากผ่านไป 2 ชั่วโมง ฉันต้องการเอาต์พุตจาก wget สำหรับเอาต์พุตมาตรฐานเพื่อป้อนกลับไปยังเรกคอร์ดคอนโซลเจนกินส์
Dennis

ฉันยังไม่ได้รับสิ่งนี้ ... ใครสามารถสาธิตวิธีการเช่น รับแท็ก img ในตัวแปรสำหรับลิงค์นี้www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108

@ juggernaut1996: นั่นควรเป็นคำถามแยกต่างหาก สั้น ๆ , คุณจะต้องดาวน์โหลดหน้าแยกsrcแอตทริบิวต์ขององค์ประกอบที่ถูกต้องแล้วดาวน์โหลดที่หน้า หากคุณติดตั้งtqคำสั่งนี้ควรทำ:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pyrocrasty

wget 1.14 รุ่นไม่ยอมรับconvert_links = onกับ-O-ตัวเลือก -k can be used together with -O only if outputting to a regular file.มันเป็นความล้มเหลวด้วยข้อผิดพลาด คาดว่า?
ปราสาทบองทู

28

มีหลายวิธีในการรับเพจจากบรรทัดคำสั่ง ... แต่ก็ขึ้นอยู่ด้วยว่าคุณต้องการซอร์สโค้ดหรือเพจนั้นเอง:

หากคุณต้องการแหล่งรหัส:

ด้วย curl:

curl $url

ด้วย wget:

wget -O - $url

แต่ถ้าคุณต้องการรับสิ่งที่คุณเห็นด้วยเบราว์เซอร์แมวป่าชนิดหนึ่งจะมีประโยชน์:

lynx -dump $url

ฉันคิดว่าคุณสามารถหาวิธีแก้ปัญหามากมายสำหรับปัญหาเล็ก ๆ น้อย ๆ นี้บางทีคุณควรอ่าน man page ทั้งหมดสำหรับคำสั่งเหล่านั้น และอย่าลืมแทนที่$urlด้วย URL ของคุณ :)

โชคดี :)




3

หากคุณติดตั้งLWPจะมีไบนารีชื่อ " GET "

$ รับ http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN">
<HTML>
<HEAD>
  <META http-equiv = "ประเภทเนื้อหา" content = "text / html; charset = utf-8">
  <TITLE> ตัวอย่างหน้าเว็บ </TITLE>
</ HEAD> 
<body>  
<p> คุณมาถึงหน้าเว็บนี้โดยพิมพ์ & quot; example.com & quot ;,
& quot; example.net & quot; & quot; & quot example.org
  หรือ & quot; example.edu & quot; ลงในเว็บเบราว์เซอร์ของคุณ </p>
<p> ชื่อโดเมนเหล่านี้สงวนไว้สำหรับใช้ในเอกสารประกอบและไม่สามารถใช้งานได้ 
  สำหรับการลงทะเบียน ดู <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a> ตอนที่ 3 </p>
</ body>
</ html>

wget -O-, curlและlynx -sourceลักษณะการทำงานคล้าย


2

คุณสามารถใช้curlหรือwgetเพื่อดึงข้อมูลดิบหรือคุณสามารถใช้w3m -dumpเพื่อแสดงข้อความที่ดีของหน้าเว็บ

$ 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.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.