如何自己寫一個網路爬蟲
這裡是維基百科對網路爬蟲的詞條頁面。網路爬蟲以叫網路蜘蛛,網路機器人,這是一個程式,其會自動的透過網路抓取網際網路上的網頁,這種技術一般可能用來檢查你的站點上所有的連結是否是都是有效的。當然,更為高階的技術是把網頁中的相關資料儲存下來,可以成為搜尋引擎。
從技相來說,實現抓取網頁可能並不是一件很困難的事情,困難的事情是對網頁的分析和整理,那是一件需要有輕量智慧,需要大量數學計算的程式才能做的事情。下面一個簡單的流程:
在這裡,我們只是說一下如何寫一個網頁抓取程式。
首先我們先看一下,如何使用命令列的方式來找開網頁。
telnet somesite.com 80
GET /index.html HTTP/1.0
按回車兩次
使用telnet就是告訴你其實這是一個socket的技術,並且使用HTTP的協議,如GET方法來獲得網頁,當然,接下來的事你就需要解析HTML文法,甚至還需要解析Javascript,因為現在的網頁使用Ajax的越來越多了,而很多網頁內容都是透過Ajax技術載入的,因為,只是簡單地解析HTML檔案在未來會遠遠不夠。當然,在這裡,只是展示一個非常簡單的抓取,簡單到只能做為一個例子,下面這個示例的虛擬碼:
取網頁
for each 連結 in 當前網頁所有的連結
{
if(如果本連結是我們想要的 || 這個連結從未訪問過)
{
處理對本連結
把本連結設定為已訪問
}
}
require “rubygems”
require “mechanize”
class Crawler < WWW::Mechanize
attr_accessor :callback
INDEX = 0
DOWNLOAD = 1
PASS = 2
def initialize
super
init
@first = true
self.user_agent_alias = “Windows IE 6″
end
def init
@visited = []
end
def remember(link)
@visited << link
end
def perform_index(link)
self.get(link)
if(self.page.class.to_s == “WWW::Mechanize::Page”)
links = self.page.links.map {|link| link.href } - @visited
links.each do |alink|
start(alink)
end
end
end
def start(link)
return if link.nil?
if(!@visited.include?(link))
action = @callback.call(link)
if(@first)
@first = false
perform_index(link)
end
case action
when INDEX
perform_index(link)
when DOWNLOAD
self.get(link).save_as(File.basename(link))
when PASS
puts “passing on #{link}”
end
end
end
def get(site)
begin
puts “getting #{site}”
@visited << site
super(site)
rescue
puts “error getting #{site}”
end
end
end
上面的程式碼就不必多說了,大家可以去試試。下面是如何使用上面的程式碼:
require “crawler”
x = Crawler.new
callback = lambda do |link|
if(link =~/\\.(zip|rar|gz|pdf|doc)
x.remember(link)
return Crawler::PASS
elsif(link =~/\\.(jpg|jpeg)/)
return Crawler::DOWNLOAD
end
return Crawler::INDEX;
end
x.callback = callback
x.start(””)
下面是一些和網路爬蟲相關的開源網路專案
arachnode.net is a .NET crawler written in C# using SQL 2005 and Lucene and is released under the GNU General Public License.
DataparkSearch is a crawler and search engine released under the GNU General Public License.
GNU Wget is a command-line-operated crawler written in C and released under the GPL. It is typically used to mirror Web and FTP sites.
GRUB is an open source distributed search crawler that Wikia Search ( ) uses to crawl the web.
Heritrix is the Internet Archive’s archival-quality crawler, designed for archiving periodic snapshots of a large portion of the Web. It was written in Java.
ht://Dig includes a Web crawler in its indexing engine.
HTTrack uses a Web crawler to create a mirror of a web site for off-line viewing. It is written in C and released under the GPL.
ICDL Crawler is a cross-platform web crawler written in C++ and intended to crawl Web sites based on
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31365439/viewspace-2677454/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- 如何編寫一個Perl爬蟲程式爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- python網路爬蟲_Python爬蟲:30個小時搞定Python網路爬蟲視訊教程Python爬蟲
- 網路爬蟲如何運作?爬蟲
- 寫網路爬蟲的法律邊界爬蟲
- 使用 Kotlin DSL 編寫網路爬蟲Kotlin爬蟲
- 手把手教你寫網路爬蟲(2):迷你爬蟲架構爬蟲架構
- 什麼是網路爬蟲?為什麼用Python寫爬蟲?爬蟲Python
- 教你如何編寫第一個簡單的爬蟲爬蟲
- 網路爬蟲爬蟲
- 寫個爬蟲唄爬蟲
- 如何防止網路爬蟲被限制?爬蟲
- 網路爬蟲編寫常見問題爬蟲
- python網路爬蟲筆記(一)Python爬蟲筆記
- 基於 Lua 寫一個爬蟲程式爬蟲
- 手把手教你寫網路爬蟲(3):開源爬蟲框架對比爬蟲框架
- 寫網路爬蟲程式的三種難度爬蟲
- 網路爬蟲示例爬蟲
- 網路爬蟲精要爬蟲
- python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)Python爬蟲
- 爬蟲:如何判斷一個網頁已經更新?爬蟲網頁
- 從零開始寫一個node爬蟲(一)爬蟲
- 從零開始,如何用puppeteer寫一個爬蟲指令碼爬蟲指令碼
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- 你有自己寫過爬蟲的程式嗎?說說你對爬蟲和反爬蟲的理解?爬蟲
- 網路爬蟲的原理爬蟲
- python DHT網路爬蟲Python爬蟲
- 網路爬蟲專案爬蟲
- 如何用Python網路爬蟲爬取網易雲音樂歌曲Python爬蟲
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- 什麼是Python網路爬蟲?常見的網路爬蟲有哪些?Python爬蟲
- [爬蟲架構] 如何設計一個分散式爬蟲架構爬蟲架構分散式
- python網路爬蟲(14)使用Scrapy搭建爬蟲框架Python爬蟲框架
- 編寫一個使用wreq庫的爬蟲程式爬蟲
- 使用python的scrapy來編寫一個爬蟲Python爬蟲
- 使用nodeJS寫一個簡單的小爬蟲NodeJS爬蟲
- 如何快速建立一個爬蟲專案爬蟲