去语言实现的web爬虫实例

  

本文实例讲述了去语言实现的web爬虫方法。分享给大家供大家参考。具体分析如下:

  

这里使用走的并发特性来并行执行网络爬虫。
  修改爬函数来并行的抓取url,并且保证不重复。
  代码如下:主要包
  导入(
  ,,“fmt”
  )
  取物的类型接口{
  ,,,,,,//获取返回URL的身体内容,并且将在这个页面上找到的URL放到一个切片中。
  ,,Fetch (url字符串)(身体字符串,字符串url[],犯错错误)
  }
//爬行使用访问者从某个URL开始递归的爬取页面,直到达到最大深度。
  func爬(url字符串,深度int,取物取物){
  ,,,,,,//TODO:并行的抓取URL。
  ,,,,,,//TODO:不重复抓取页面。
  ,,,,,,//下面并没有实现上面两种情况:
  ,,如果深度& lt;=0 {
  ,,,,,,返回
  ,,}
  ,,身体,url,犯错:=fetcher.Fetch (url)
  ,,如果犯错!=nil {
  ,,,,,,fmt.Println (err)
  ,,,,,,返回
  ,,}
  ,,fmt。Printf("发现:% s % q \ n ", url,身体)
  ,,_,u:=范围url {
  ,,,,,,爬(u(访问者)
  ,,}
  ,,返回
  }
  函数main () {
  ,,爬(" http://golang.org/" 4取物)
  }
//fakeFetcher是返回若干结果的访问者。
  类型fakeFetcher map [string] * fakeResult
  fakeResult struct类型{
  ,,身体字符串
  ,,urls ,,,[]字符串
  }
  func (f * fakeFetcher)获取(url字符串)(字符串、[]字符串错误){
  ,,如果res,好的:=f (*) [url];好{
  ,,,,,,返回res.body res.urls, nil
  ,,}
  ,,返回",nil, fmt。Errorf(“未找到:% s”, url)
  }
//取物是填充后的fakeFetcher。
  var访问者=,fakeFetcher {
  ,,“http://golang.org/?和fakeResult {
  ,,,,,,“去编程语言”,
  ,,,,,,[]字符串{
  ,,,,,,,,,,“http://golang.org/pkg/?
  ,,,,,,,,,,“http://golang.org/cmd/?
  ,,,,,,},
  ,,},
  ,,“http://golang.org/pkg/?和fakeResult {
  ,,,,,,“包”,
  ,,,,,,[]字符串{
  ,,,,,,,,,,“http://golang.org/?
  ,,,,,,,,,,“http://golang.org/cmd/?
  ,,,,,,,,,,“http://golang.org/pkg/fmt/?
  ,,,,,,,,,,“http://golang.org/pkg/os/?
  ,,,,,,},
  ,,},
  ,,“http://golang.org/pkg/fmt/?和fakeResult {
  ,,,,,,“包fmt”,
  ,,,,,,[]字符串{
  ,,,,,,,,,,“http://golang.org/?
  ,,,,,,,,,,“http://golang.org/pkg/?
  ,,,,,,},
  ,,},
  ,,“http://golang.org/pkg/os/?和fakeResult {
  ,,,,,,“包操作系统”,
  ,,,,,,[]字符串{
  ,,,,,,,,,,“http://golang.org/?
  ,,,,,,,,,,“http://golang.org/pkg/?
  ,,,,,,},
  ,,},
  }

  

希望本文所述对大家的去语言程序设计有所帮助。

去语言实现的web爬虫实例