• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0

            這里是維基百科對網(wǎng)絡(luò)爬蟲的詞條頁面。網(wǎng)絡(luò)爬蟲以叫網(wǎng)絡(luò)蜘蛛,網(wǎng)絡(luò)機(jī)器人,這是一個(gè)程序,其會自動(dòng)的通過網(wǎng)絡(luò)抓取互聯(lián)網(wǎng)上的網(wǎng)頁,這種技術(shù)一般可能用來檢查你的站點(diǎn)上所有的鏈接是否是都是有效的。當(dāng)然,更為高級的技術(shù)是把網(wǎng)頁中的相關(guān)數(shù)據(jù)保存下來,可以成為搜索引擎。

            從技相來說,實(shí)現(xiàn)抓取網(wǎng)頁可能并不是一件很困難的事情,困難的事情是對網(wǎng)頁的分析和整理,那是一件需要有輕量智能,需要大量數(shù)學(xué)計(jì)算的程序才能做的事情。下面一個(gè)簡單的流程:

             

            在這里,我們只是說一下如何寫一個(gè)網(wǎng)頁抓取程序。

            首先我們先看一下,如何使用命令行的方式來找開網(wǎng)頁。

            telnet somesite.com 80
            GET /index.html HTTP/1.0
            按回車兩次

            使用telnet就是告訴你其實(shí)這是一個(gè)socket的技術(shù),并且使用HTTP的協(xié)議,如 GET方法來獲得網(wǎng)頁,當(dāng)然,接下來的事你就需要解析HTML文法,甚至還需要解析Javascript,因?yàn)楝F(xiàn)在的網(wǎng)頁使用Ajax的越來越多了,而很多網(wǎng)頁內(nèi)容都是通過Ajax技術(shù)加載的,因?yàn)椋皇呛唵蔚亟馕鯤TML文件在未來會遠(yuǎn)遠(yuǎn)不夠。當(dāng)然,在這里,只是展示一個(gè)非常簡單的抓取,簡單到只能做為一個(gè)例子,下面這個(gè)示例的偽代碼:

            取網(wǎng)頁
            for each 鏈接 in 當(dāng)前網(wǎng)頁所有的鏈接
            {
            if(如果本鏈接是我們想要的 || 這個(gè)鏈接從未訪問過)
            {
            處理對本鏈接
            把本鏈接設(shè)置為已訪問
            }
            }
            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(”http://somesite.com”)

            下面是一些和網(wǎng)絡(luò)爬蟲相關(guān)的開源網(wǎng)絡(luò)項(xiàng)目

            from:
            http://coolshell.cn/?p=27

            posted on 2010-02-18 21:54 chatler 閱讀(702) 評論(0)  編輯 收藏 引用 所屬分類: SearchEngine

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2009年11月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            青青草国产精品久久| 久久精品国产久精国产果冻传媒| 久久这里的只有是精品23| 天天久久狠狠色综合| 久久精品国产一区二区电影| 久久w5ww成w人免费| 久久久久一区二区三区| 99久久99久久| 人人狠狠综合88综合久久| 中文字幕日本人妻久久久免费| 国产69精品久久久久久人妻精品| 2022年国产精品久久久久 | 亚洲色欲久久久久综合网| 亚洲综合伊人久久综合| 青青国产成人久久91网| 日韩欧美亚洲综合久久| 国产91久久精品一区二区| 2021最新久久久视精品爱| 国产精品久久毛片完整版| 性欧美大战久久久久久久| 久久99国产精品久久99果冻传媒| 久久免费99精品国产自在现线 | 一极黄色视频久久网站| 国产精品久久久久…| 成人综合久久精品色婷婷| 久久黄色视频| 香港aa三级久久三级| 69久久精品无码一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 久久涩综合| 久久国产劲爆AV内射—百度| 久久久久亚洲AV无码去区首| 久久精品国产91久久综合麻豆自制| 97久久国产露脸精品国产| 狠狠色伊人久久精品综合网| 久久久久成人精品无码中文字幕 | 久久综合九色综合97_久久久 | 久久露脸国产精品| 亚洲国产成人久久综合一| 狼狼综合久久久久综合网| 99久久精品国产综合一区|