คุณกำลังพยายามแยกวิเคราะห์ HTML ด้วย Ruby หรือไม่
งานนี้อาจจะยากหน่อย หากคุณไม่มีเครื่องมือที่เหมาะสม .
แต่วันนี้คุณโชคดี!
เพราะ Ruby มีห้องสมุดที่ยอดเยี่ยมที่เรียกว่า Nokogiri ซึ่งทำให้ HTML แยกวิเคราะห์เดินเล่นในสวนสาธารณะ
มาดูตัวอย่างกัน
ขั้นแรก ติดตั้ง nokogiri gem ด้วย:
gem install nokogiri
หากคุณมีปัญหาในการติดตั้งอัญมณี ให้ลองทำดังนี้:
gem install nokogiri -- --use-system-libraries
วิธีการแยกหัวข้อ
จากนั้นสร้างสคริปต์ต่อไปนี้ ซึ่งมีข้อมูลโค้ด HTML พื้นฐานที่จะแยกวิเคราะห์โดย nokogiri .
เรียกใช้รหัสนี้เพื่อรับชื่อหน้า :
require 'nokogiri' html = "test actual content here..." parsed_data = Nokogiri::HTML.parse(html) puts parsed_data.title => "test"
หากคุณต้องการแยกวิเคราะห์ข้อมูลโดยตรงจาก URL แทนที่จะเป็นสตริง HTML…
คุณทำได้ :
require 'open-uri' Nokogiri::HTML.parse(open('https://example.com')).title
การดำเนินการนี้จะดาวน์โหลด HTML และรับชื่อ
ตอนนี้ :
ตั้งชื่อเรื่องได้ดี แต่คุณอาจต้องการดูตัวอย่างขั้นสูงเพิ่มเติม
ใช่ไหม
มาดูวิธีการดึงลิงค์จากเว็บไซต์
การแยก Anchor Links
หากคุณต้องการลิงก์ทั้งหมดจากหน้าเว็บก่อน คุณจะต้องมี HTML
คุณสามารถใช้ open-uri
. เดียวกันได้ เทคนิคในการดาวน์โหลด HTML สำหรับเว็บไซต์สาธารณะใดๆ
จากนั้นแยกวิเคราะห์ด้วย Nokogiri เพื่อรับวัตถุเอกสาร
ถูกใจสิ่งนี้ :
document = Nokogiri::HTML.parse(open('https://example.com')) document.class # Nokogiri::HTML::Document
คุณสามารถสอบถามข้อมูลวัตถุนี้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี:
- การใช้การสืบค้น XPath
- การใช้ตัวเลือก CSS
มาดูวิธีการทำสิ่งนี้โดยใช้ XPath กันก่อน
นี่คือรหัส :
tags = document.xpath("//a")
มันทำอะไรได้บ้าง?
กรองแท็ก HTML ทั้งหมดในหน้าเว็บ และมอบสิ่งที่คุณต้องการให้กับคุณ
ในกรณีนี้คือแท็ก “a”
ซึ่งเป็นแท็กที่มีลิงก์ใน HTML
ตอนนี้ :
สิ่งที่คุณมีคืออาร์เรย์ของ Nokogiri::XML::Element
เป็นตัวแทนของแท็กเหล่านี้
หากคุณต้องการรับ URL และข้อความของลิงก์ คุณสามารถทำได้:
tags.each do |tag| puts "#{tag[:href]}\t#{tag.text}" end
การดำเนินการนี้จะพิมพ์ลิงก์ทั้งหมดบนหน้าจอของคุณ หนึ่งลิงก์ต่อบรรทัด
หากต้องการลบข้อมูลอื่นๆ แทนลิงก์ เช่น รายการรูปภาพที่มีอยู่ในหน้า คุณสามารถทำตามขั้นตอนเดียวกันได้
สิ่งเดียวที่คุณต้องเปลี่ยนคือประเภทของแท็กที่คุณต้องการ
ตัวอย่างเช่น :
tags = document.xpath("//img") images_urls = tags.map { |t| t[:src] }
โดยที่ img
เป็นแท็ก HTML สำหรับรูปภาพ และ src
เป็นแอตทริบิวต์ที่จัดเก็บ URL รูปภาพ
หากต้องการค้นหาตัวเลือก CSS และแอตทริบิวต์ที่ถูกต้อง ให้ใช้เครื่องมือสำหรับนักพัฒนาของเบราว์เซอร์
การใช้ตัวเลือก CSS กับ Nokogiri
คุณสามารถใช้ตัวเลือก CSS ได้โดยแทนที่ xpath
เมธอดด้วย css
วิธีการ
นี่คือตัวอย่าง :
headers = document.css("h1") paragraphs = document.css("p")
หมายเหตุ :ความแตกต่างระหว่าง
at_css
&css
คืออันแรกส่งคืนองค์ประกอบที่ตรงกันครั้งแรกเท่านั้น แต่อันหลังส่งคืนองค์ประกอบที่ตรงกันทั้งหมด
การใช้ CSS ทำให้คุณได้ผลลัพธ์แบบเดียวกัน ประเด็นทั้งหมดคือการบอก Nokogiri ว่าองค์ประกอบ HTML ใดที่คุณต้องการใช้งาน
นักพัฒนาส่วนใหญ่คุ้นเคยกับ CSS มากกว่า XPath ดังนั้นคุณจึงต้องการใช้ CSS
สรุป
คุณสามารถค้นหาเอกสารประกอบของ Nokogiri ได้ที่นี่:
https://www.rubydoc.info/github/sparklemotion/nokogiri
คุณอาจชอบ:
รูปแบบสตริงทับทิม