Wgit เป็นโปรแกรมรวบรวมข้อมูลเว็บ HTML ที่เขียนด้วย Ruby ซึ่งช่วยให้คุณสามารถดึงข้อมูลที่คุณต้องการจากเว็บโดยทางโปรแกรม
Wgit ได้รับการออกแบบมาเพื่อรวบรวมข้อมูลเว็บไซต์ HTML แบบคงที่เป็นหลักเพื่อสร้างดัชนีและค้นหาเนื้อหา โดยเป็นพื้นฐานของเครื่องมือค้นหา แต่ Wgit เหมาะสำหรับโดเมนแอปพลิเคชันมากมาย รวมถึง:
Wgit มี API และ DSL ระดับสูงที่ใช้งานง่าย ซึ่งคุณสามารถใช้ในแอปพลิเคชันและสคริปต์ของคุณเองได้
ลองดูเครื่องมือค้นหาสาธิตนี้ซึ่งสร้างโดยใช้ Wgit, Sinatra และ MongoDB ซึ่งปรับใช้กับ fly.io ลองค้นหาบางสิ่งที่เกี่ยวข้องกับ Ruby เช่น "Matz" หรือ "Rails"
มารวบรวมข้อมูลเว็บไซต์คำพูดโดยแยก คำพูด และ ผู้แต่ง โดยใช้ Wgit DSL:
require 'wgit'
require 'json'
include Wgit :: DSL
start 'http://quotes.toscrape.com/tag/humor/'
follow "//li[@class='next']/a/@href"
extract :quotes , "//div[@class='quote']/span[@class='text']" , singleton : false
extract :authors , "//div[@class='quote']/span/small" , singleton : false
quotes = [ ]
crawl_site do | doc |
doc . quotes . zip ( doc . authors ) . each do | arr |
quotes << {
quote : arr . first ,
author : arr . last
}
end
end
puts JSON . generate ( quotes )
ผลลัพธ์ใด:
[
{
"quote": "“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”",
"author": "Jane Austen"
},
{
"quote": "“A day without sunshine is like, you know, night.”",
"author": "Steve Martin"
},
...
]
ยอดเยี่ยม! แต่ถ้าเราต้องการที่จะรวบรวมข้อมูลและจัดเก็บเนื้อหาในฐานข้อมูลเพื่อให้สามารถค้นหาได้ล่ะ? Wgit ทำให้ง่ายต่อการจัดทำดัชนีและค้นหา HTML โดยใช้ MongoDB (โดยค่าเริ่มต้น):
require 'wgit'
include Wgit :: DSL
Wgit . logger . level = Logger :: WARN
ENV [ 'WGIT_CONNECTION_STRING' ] = 'mongodb://user:password@localhost/crawler'
start 'http://quotes.toscrape.com/tag/humor/'
follow "//li[@class='next']/a/@href"
extract :quotes , "//div[@class='quote']/span[@class='text']" , singleton : false
extract :authors , "//div[@class='quote']/span/small" , singleton : false
index_site
search 'prejudice'
การโทร search
(ในบรรทัดสุดท้าย) จะกลับมาและส่งออกผลลัพธ์:
Quotes to Scrape
“I am free of all prejudice. I hate everyone equally. ”
http://quotes.toscrape.com/tag/humor/page/2/
...
เมื่อใช้ไคลเอ็นต์ฐานข้อมูล เราจะเห็นว่าหน้าเว็บทั้งสองได้รับการจัดทำดัชนี พร้อมด้วย คำพูด และ ผู้แต่ง ที่แยกออกมา:
DSL ทำให้ง่ายต่อการเขียนสคริปต์สำหรับการทดลอง DSL ของ Wgit เป็นเพียงตัวห่อหุ้มคลาสพื้นฐาน เพื่อการเปรียบเทียบ นี่คือตัวอย่างใบเสนอราคาที่เขียนใหม่โดยใช้ Wgit API แทน DSL:
require 'wgit'
require 'json'
crawler = Wgit :: Crawler . new
url = Wgit :: Url . new ( 'http://quotes.toscrape.com/tag/humor/' )
quotes = [ ]
Wgit :: Document . define_extractor ( :quotes , "//div[@class='quote']/span[@class='text']" , singleton : false )
Wgit :: Document . define_extractor ( :authors , "//div[@class='quote']/span/small" , singleton : false )
crawler . crawl_site ( url , follow : "//li[@class='next']/a/@href" ) do | doc |
doc . quotes . zip ( doc . authors ) . each do | arr |
quotes << {
quote : arr . first ,
author : arr . last
}
end
end
puts JSON . generate ( quotes )
มีโปรแกรมรวบรวมข้อมูล HTML อื่นๆ อีกมากมาย เหตุใดจึงต้องใช้ Wgit
xpath
ที่จำเป็นในการ ติดตาม URL ถัดไปเพื่อรวบรวมข้อมูล Wgit ตามค่าเริ่มต้น จะรวบรวมข้อมูลทั้งไซต์โดยแยกลิงก์ภายในที่ชี้ไปยังโฮสต์เดียวกัน - ไม่จำเป็นต้องใช้ xpath
require 'wgit'
ENV [ 'WGIT_CONNECTION_STRING' ] = 'mongodb://user:password@localhost/crawler'
wiki = Wgit :: Url . new ( 'https://github.com/michaeltelford/wgit/wiki' )
# Only index the most recent of each wiki article, ignoring the rest of Github.
opts = {
allow_paths : 'michaeltelford/wgit/wiki/*' ,
disallow_paths : 'michaeltelford/wgit/wiki/*/_history'
}
indexer = Wgit :: Indexer . new
indexer . index_site ( wiki , ** opts )
robots.txt
ของไซต์โดยค่าเริ่มต้น นอกจากนี้ยังมีโปรแกรมแยกวิเคราะห์ robots.txt
ที่มีประโยชน์ซึ่งคุณสามารถใช้ในโค้ดของคุณเองได้ เหตุใดคุณจึงไม่ใช้ Wgit ฉันได้ยินคุณถาม
libcurl
สำหรับ HTTP ฯลฯ) ไม่ใช่แบบมัลติเธรด ดังนั้นแต่ละ URL จึงได้รับการรวบรวมข้อมูลตามลำดับ คุณสามารถส่งเอกสารที่รวบรวมข้อมูลแต่ละฉบับให้กับเธรดของผู้ปฏิบัติงานเพื่อการประมวลผล แต่ถ้าคุณต้องการรวบรวมข้อมูลพร้อมกัน คุณควรพิจารณาอย่างอื่น มีเพียง MRI Ruby เท่านั้นที่ได้รับการทดสอบและรองรับ แต่ Wgit อาจทำงานร่วมกับการใช้งาน Ruby อื่นๆ ได้
ปัจจุบัน MRI Ruby เวอร์ชันที่รองรับคือ:
ruby '~> 3.0'
หรือที่รู้จักระหว่าง Ruby 3.0 และสูงถึง แต่ไม่รวม Ruby 4.0 Wgit อาจจะทำงานได้ดีกับเวอร์ชันเก่า แต่ควรอัปเกรดหากเป็นไปได้จะดีที่สุด
$ bundle add wgit
$ gem install wgit
$ wgit
การเรียกไฟล์ปฏิบัติการที่ติดตั้งไว้จะเริ่มเซสชัน REPL
การติดตั้ง Wgit gem จะเพิ่ม wgit
ที่สามารถเรียกใช้งานได้ $PATH
ของคุณ ไฟล์เรียกทำงานจะเปิดเซสชัน REPL แบบโต้ตอบพร้อมกับ Wgit gem ที่โหลดไว้แล้ว ทำให้ง่ายต่อการจัดทำดัชนีและค้นหาจากบรรทัดคำสั่งโดยไม่ต้องใช้สคริปต์
ไฟล์ปฏิบัติการ wgit
ทำสิ่งต่อไปนี้ (ตามลำดับ):
require wgit
.env
(หากมีอยู่ในไดเร็กทอรีภายในเครื่องหรือโฮมไดเร็กทอรี ซึ่งจะถูกพบก่อน)eval
'sa .wgit.rb
(หากมีอยู่ในไดเร็กทอรีภายในเครื่องหรือโฮมไดเร็กทอรี ซึ่งจะถูกพบก่อน)pry
หากติดตั้งไว้ หรือใช้ irb
หากไม่ได้ติดตั้ง) ไฟล์ .wgit.rb
สามารถใช้เพื่อค้นหาข้อมูลฟิกซ์เจอร์หรือกำหนดฟังก์ชันตัวช่วยสำหรับเซสชันได้ ตัวอย่างเช่น คุณสามารถกำหนดฟังก์ชันที่จัดทำดัชนีเว็บไซต์ของคุณเพื่อให้ค้นหาได้ง่ายและรวดเร็วทุกครั้งที่คุณเริ่ม wgit
อัญมณีนี้มีให้ใช้งานในรูปแบบโอเพ่นซอร์สภายใต้เงื่อนไขของใบอนุญาต MIT ดู LICENSE.txt สำหรับรายละเอียดเพิ่มเติม
รายงานข้อผิดพลาดและการร้องขอคุณสมบัติยินดีต้อนรับบน GitHub เพียงแจ้งปัญหาโดยตรวจสอบว่าไม่มีอยู่จริง
แผนที่ถนนปัจจุบันแสดงอยู่ในรายการเบื้องต้นในหน้าวิกิแผนที่ถนน บางทีคำขอคุณลักษณะของคุณอาจมีอยู่แล้ว?
ก่อนที่คุณจะพิจารณาบริจาค โปรดดูที่ CONTRIBUTING.md
หลังจากตรวจสอบ repo แล้ว ให้รันคำสั่งต่อไปนี้:
gem install bundler toys
bundle install --jobs=3
toys setup
และคุณก็พร้อมที่จะไป!
Wgit ใช้อัญมณีของเล่น (แทน Rake) สำหรับการเรียกใช้งาน เรียกใช้ toys
เป็น bundle exec toys
เสมอ หากต้องการดูรายการงานทั้งหมดหรือที่เรียกว่า tools ให้รัน bundle exec toys --tools
คุณสามารถค้นหาเครื่องมือโดยใช้ bundle exec toys -s tool_name
เครื่องมือที่ใช้บ่อยที่สุดมีดังต่อไปนี้...
เรียกใช้ bundle exec toys db
เพื่อดูรายการเครื่องมือที่เกี่ยวข้องกับฐานข้อมูล ทำให้คุณสามารถเรียกใช้อินสแตนซ์ Mongo DB ภายในเครื่องโดยใช้ Docker รัน bundle exec toys test
เพื่อดำเนินการทดสอบ
หากต้องการสร้างเอกสารประกอบโค้ดในเครื่อง ให้รัน bundle exec toys yardoc
หากต้องการเรียกดูเอกสารในเบราว์เซอร์ให้รัน bundle exec toys yardoc --serve
คุณยังสามารถใช้เครื่องมือบรรทัดคำสั่ง yri
เช่น yri Wgit::Crawler#crawl_site
เป็นต้น
หากต้องการติดตั้ง gem นี้ลงในเครื่องของคุณ ให้รัน bundle exec toys install
และปฏิบัติตามคำแนะนำ
คุณสามารถรัน bundle exec toys console
สำหรับเชลล์แบบโต้ตอบได้โดยใช้ไฟล์เรียกทำงาน ./bin/wgit
งาน bundle exec toys setup
จะสร้างไฟล์ .env
และ .wgit.rb
ซึ่งได้รับการโหลดโดยโปรแกรมปฏิบัติการ คุณสามารถใช้เนื้อหาของส่วนสำคัญนี้เพื่อเปลี่ยนไฟล์ปฏิบัติการให้เป็นคอนโซลการพัฒนาได้ โดยจะกำหนดฟังก์ชันที่เป็นประโยชน์ ฟิกซ์เจอร์ และการเชื่อมต่อกับฐานข้อมูล ฯลฯ อย่าลืมตั้ง WGIT_CONNECTION_STRING
ในไฟล์ . .env