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 可以輕鬆使用 MongoDB 索引和搜尋 HTML(預設):
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 可以輕鬆編寫用於實驗的腳本。 Wgit 的 DSL 只是底層類別的包裝。為了進行比較,以下是使用 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
。預設情況下,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
時快速輕鬆地進行搜尋。
該 gem 根據 MIT 授權條款作為開源提供。有關詳細信息,請參閱 LICENSE.txt。
GitHub 歡迎提交錯誤報告和功能請求。只需提出一個問題,檢查它是否已經存在。
目前的路線圖基本上列在路線圖 wiki 頁面中。也許您的功能請求已經存在?
在考慮做出貢獻之前,請查看 CONTRIBUTING.md。
檢查儲存庫後,執行以下命令:
gem install bundler toys
bundle install --jobs=3
toys setup
你就可以出發了!
Wgit 使用toys gem(而非Rake)進行任務呼叫。始終將toys
作為bundle exec toys
運行。有關可用任務(又稱工具)的完整列表,請執行bundle exec toys --tools
。您可以使用bundle exec toys -s tool_name
搜尋工具。下面列出了最常用的工具...
執行bundle exec toys db
以查看資料庫相關工具的列表,使您能夠使用 Docker 在本機上執行 Mongo DB 實例。運行bundle exec toys test
來執行測試。
若要在本機產生程式碼文檔,請執行bundle exec toys yardoc
。若要在瀏覽器中瀏覽文檔,請執行bundle exec toys yardoc --serve
。您也可以使用yri
命令列工具,例如yri Wgit::Crawler#crawl_site
等。
若要將此 gem 安裝到本機上,請執行bundle exec toys install
並按照提示進行操作。
您可以使用./bin/wgit
執行檔為互動式 shell 執行bundle exec toys console
。 bundle exec toys setup
任務將建立一個由可執行檔載入的.env
和.wgit.rb
檔。您可以使用此要點的內容將可執行檔轉換為開發控制台。它定義了一些有用的WGIT_CONNECTION_STRING
、裝置並連接到.env
庫等。