1.如何自己写一个网络爬虫
网络爬虫以叫网络蜘蛛,网络机器人,这是一个程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所有的链接是否是都是有效的。当然,更为高级的技术是把网页中的相关数据保存下来,可以成为搜索引擎。
从技相来说,实现抓取网页可能并不是一件很困难的事情,困难的事情是对网页的分析和整理,那是一件需要有轻量智能,需要大量数学计算的程序才能做的事情。下面一个简单的流程:
在这里,我们只是说一下如何写一个网页抓取程序。首先我们先看一下,如何使用命令行的方式来找开网页。telnet somesite.com 80
get /index.html 文法,甚至还需要解析javascript,因为现在的网页使用ajax的越来越多了,而很多网页内容都是通过ajax技术加载的,因为,只是简单地解析html
2.如何自己写一个网络爬虫
网络爬虫以叫网络蜘蛛,网络机器人,这是一个程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所有的链接是否是都是有效的。当然,更为高级的技术是把网页中的相关数据保存下来,可以成为搜索引擎。
从技相来说,实现抓取网页可能并不是一件很困难的事情,困难的事情是对网页的分析和整理,那是一件需要有轻量智能,需要大量数学计算的程序才能做的事情。下面一个简单的流程:
在这里,我们只是说一下如何写一个网页抓取程序。
首先我们先看一下,如何使用命令行的方式来找开网页。
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
3.如何做一个简单爬虫
“入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。
另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,你不需要学习怎么样“入门”,因为这样的“入门”点根本不存在!你需要学习的是怎么样做一个比较大的东西,在这个过程中,你会很快地学会需要学会的东西的。当然,你可以争论说需要先懂python,不然怎么学会python做爬虫呢?但是事实上,你完全可以在做这个爬虫的过程中学习python :D
看到前面很多答案都讲的“术”——用什么软件怎么爬,那我就讲讲“道”和“术”吧——爬虫怎么工作以及怎么在python实现。
先长话短说summarize一下:
你需要学习
基本的爬虫工作原理
基本的 文法,甚至还需要解析javascript,因为现在的网页使用ajax的越来越多了,而很多网页内容都是通过ajax技术加载的,因为,只是简单地解析html。
5.如何用Java写一个爬虫
最近刚好在学这个,对于一些第三方工具类或者库,一定要看官方tutorial啊。
学会用chrome network 分析请求,或者fiddler抓包分析。
普通的网页直接用下载下来,然后从里面提取出来有用的信息,这些有用的信息一般就是正文,图片,链接一类的信息。针对特定网站的爬虫就更好写了,用正则表达式,把网页里的链接信息找到,然后找到需要的信息,保存在本地,然后进入下一个链接重复上一次的过程。
下面的脚本演示如何从加菲猫的官网上把从1978年至今的所有漫画全部下载下来 import os,urllib,urllib2,re hosts = "pile('''.+?(.*?)''') pcomic = re.compile('''''') pnext = re.compile('''''') def getpage(url):print url req = urllib2.Request(url) req.add_header("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0") req.add_header("If-None-Match","") u = urllib2.urlopen(req).read() return u def getnextpos(content,patten):r = patten.findall(content) for x in r:print 'find next: ',x return x def savecomic(content,patten):r = patten.findall(content) print 'find commic:',r r2 = pname.findall(content) print 'find name:',r2 urlcomic = r[0] u = urllib.urlopen(urlcomic).read() name = r2[0].replace(' ','').split(',') year = name[-1] day = name[-2] filename = 'test.jpg' if not os.path.exists(year):os.makedirs(year)# is gif file ,the name the file as gif if ((u[0] is 'G') and (u[1] is 'I') and (u[2] is 'F')):filename = year+day+'.gif' else:filename = year+day+'.jpg' f = file(year+"/"+filename,"wb+") f.write(u) f.close() def main():url = hosts+initpos while(True):c = getpage(url) savecomic(c,pcomic) u = getnextpos(c,pnext) if u is None:break else:url = hosts+u if __name__ == '__main__':main()。