如何自己写一个网络爬虫
这里是维基百科对网络爬虫的词条页面。网络爬虫以叫网络蜘蛛,网络机器人,这是一个程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所有的链接是否是都是有效的。当然,更为高级的技术是把网页中的相关数据保存下来,可以成为搜索引擎。
从技相来说,实现抓取网页可能并不是一件很困难的事情,困难的事情是对网页的分析和整理,那是一件需要有轻量智能,需要大量数学计算的程序才能做的事情。下面一个简单的流程:
在这里,我们只是说一下如何写一个网页抓取程序。
首先我们先看一下,如何使用命令行的方式来找开网页。
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([email protected]?(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”)
下面是一些和网络爬虫相关的开源网络项目
- 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 ( http://wikiasearch.com ) 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
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《如何自己写一个网络爬虫》的相关评论
网络爬虫程序不简单哦
是Ruby?
当前比较流行的是定题爬虫,专门提取特定语义的内容,用于建立垂直搜索、情报采集等等,此类爬虫可以剔除不相关的内容,而且一般将提取到的内容存成有结构的格式,例如,存入关系数据库、存成XML文件、CSV或者EXCEL文件等等。
MetaSeeker工具包就是这样的爬虫,客户端软件99%的代码用Javascript写成,可以读源代码,由于运行在Mozilla平台上,借用了强大的Mozilla平台功能,几乎可以实现任何网页内容的提取,例如,其它工具难于处理的AJAX网站内容。
软件下载地址:http://www.gooseeker.com
我是来学习的:)
不错
佩服厉害的人物
..爬虫很有技术含量哦~!
为了自己用写了一个在线漫画下载器,典型的HTTP蜘蛛~还好这些网站的页面都很简单,最复杂的也就是javascript的eval-packet压缩。
为了自己用写了一个在线图片下载器,典型的HTTP蜘蛛~还好这些网站的页面都很简单,(最复杂的也就是javascript的eval-packet压缩)这个我都没涉及到。就是shell + perl + flashget就搞定了。
可是如果大量的固定的去讀取網路的資料,流量上會容易引起別人注意,而且聽說是違法的??
以後也不必自己更新內容了,直接從各網站截取資料就好了。
很牛!!
我拿Bash shell写过图片爬虫。。。。。
Bash + 正则表达式 + curl就搞定啦
curl是个好东西。
越来越发现linux下面好东西正是多啊!
这方面windows确实不能比!
好像广告 坏人 :(@Fuller
我尝试过用C的socket编程写爬虫过。。。
但是获得的信息好像夹杂了些其他东西,不知道找什么文档比较好…
只说明了spider的大致逻辑,还有很多没涉及到,比如如何控制 spider执行深度优先爬去还是广度有些爬取等.
我也打算写个网络爬虫, 抓取京东这类的购物网站的数据然后分析价格等等。想想近期自己写一个试试
chongdata.com是我写的一个网络爬虫,基于Python实现~可以大规模提取网页关键字,现在免费试用,欢迎试用
chongdata.com 是我写的一个网络爬虫,基于Python实现~可以大规模提取网页关键字,现在免费试用,欢迎试用, 有凡客和淘宝的价格提取案例
最近写了一个专门抓取百度网盘的程序 http://www.iqibing.com
可是总觉得太浅了,好像一些深度抓取还不是很懂。
http://www.SaiBoDY.Com 赛博电影 是我自己的写的一个复合型爬虫抓取的,可以瞬间全自动抓取、筛选、整合和排列各种类型的影视资源,已经做到了24小时无人值守的高效,对于博主的这篇文章,也受益匪浅,学习了。谢谢。
based on what?