Golang 爬虫-广度优先(获取html文档中的超链接)
package main
import(
"fmt"
"net/http"
"io/ioutil"
"regexp"
"strings"
)
var href_reg *regexp.Regexp
var hrefs_been_found map[string]int
var hrefs_undone []string
func get_all_href(url string)([]string){
var ret [] string
resp,err := http.Get(url)
if err!=nil {
fmt.Println(err)
return ret
}
defer resp.Body.Close()
body,_ := ioutil.ReadAll(resp.Body)
hrefs := href_reg.FindAllString(string(body),-1)
for _,v := range hrefs{
str := strings.Split(v,"\"")[1]
if len(str)<1{
continue
}
switch str[0]{
case 'h':
ret = append(ret,str)
case '/':
if len(str)!=1 && str[1]=='/'{
ret = append(ret,"http:"+str)
}
if len(str)!=1 && str[1]!='/'{
ret = append(ret,url+str[1:])
}
default:
ret = append(ret,url+str)
}
}
return ret
}
func init_global_var(){
href_pattern := "href=\"(.+?)\""
href_reg = regexp.MustCompile(href_pattern)
hrefs_been_found = make(map[string]int)
}
func is_href_been_found(href string)bool{
_,ok := hrefs_been_found[href]
return ok
}
func add_hrefs_to_undone_list(hrefs []string){
for _,value := range hrefs {
ok := is_href_been_found(value)
if !ok {
fmt.Printf("new url:(%s)\n",value);
hrefs_undone = append(hrefs_undone,value)
hrefs_been_found[value]=1
}else{
hrefs_been_found[value]++
}
}
}
func main(){
init_global_var()
var pos = 0
var urls = []string{"http://www.baidu.com"}
add_hrefs_to_undone_list(urls)
for {
if pos >= len(hrefs_undone) {
break
}
url:= hrefs_undone[0]
hrefs_undone = hrefs_undone[1:]
hrefs := get_all_href(url)
add_hrefs_to_undone_list(hrefs)
}
}
Golang 爬虫-广度优先(获取html文档中的超链接)的更多相关文章
- java使用正则从爬虫爬的txt文档中提取QQ邮箱
我的需求是从一堆文档中提取出qq邮箱,写了这篇帖子,希望能帮助和我有一样需求的人,谢谢!...... import java.io.BufferedReader; import java.io.Fil ...
- Java解析word,获取文档中图片位置
前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...
- 一个简易的Python爬虫,将爬取到的数据写入txt文档中
代码如下: import requests import re import os #url url = "http://wiki.akbfun48.com/index.php?title= ...
- javaScript获取文档中所有元素节点的个数
HTML+JS 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- jquery获取元素在文档中的位置信息以及滚动条位置(转)
jquery获取元素在文档中的位置信息以及滚动条位置 http://blog.csdn.net/qq_34095777/article/details/78750886 原文链接 原创 201 ...
- 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中
下面是自己编写的 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中 (以防忘记) 原创哟 import java.io.BufferedReader;import java.io.Buffe ...
- html中如何获取元素在文档中的位置
html中如何获取元素在文档中的位置 一.总结 一句话总结: $("#elem").offset().top $("#elem").offset().left ...
- Xpath 获取html文档的标签
1.html page content: <div class="mnr-c _yE"> <div class="_kk _wI">In ...
- 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)
为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...
随机推荐
- 详解Vue.js 技术
本文主要从8个章节详解vue技术揭秘,小编觉得挺有用的,分享给大家. 为了把 Vue.js 的源码讲明白,课程设计成由浅入深,分为核心.编译.扩展.生态四个方面去讲,并拆成了八个章节,如下: 准备工作 ...
- 打包错误--Error:A problem was found with the configuration of task ':app:packageRelease'.
解决办法: app目录下的build.gradle文件 将 shrinkResources 的值改为 false 或者直接去掉 shrinkResources true 表示 :打包的时候会去删除一 ...
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- [20170603]12c Top Frequency histogram.txt
---恢复内容开始--- [20170603]12c Top Frequency histogram.txt --//个人对直方图了解很少,以前2种直方图类型对于目前的许多应用来讲已经足够,或者讲遇到 ...
- jQuery ajax()使用serialize()提交form数据到后台
1.选中要删除的学生信息 2.点击 删除选中 按钮,把复选框中的值取出提交到后台 3.后台获取选中的id 4.前端也跟着删除数据 示例代码: 前端代码: <!DOCTYPE html> & ...
- Linux学习历程——Centos 7 man命令
一.man命令介绍 man,为单词manual的缩写,是linux下的帮助指令. 二.实例 以man命令为例,输入 man man 获取man命令的帮助文档 可以看出,使用man命令查询到的帮助信 ...
- 利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果
利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果/etc/init.d/nginxd {start/stop/restart/reload}利用if语句实现: ============= ...
- Flask中使用cookie和session
Flask中使用cookie和session 设置cookie from flask import Flask,Response app = Flask(__name__) @app.route('/ ...
- PE 添加系统管理员账号(域控可加)转
使用U盘制作一个PE系统,这里推荐老毛桃或者大白菜:开机进入Bios,选择U盘启动:进入U盘启动画面后,选择一个PE系统:进入PE系统后,我们去本机系统盘,将 C:/Windows/System32/ ...
- oracle外部表
关于外部表的描述 正确描述 the create table as select statement can be used to upload data into a normal table in ...