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对文档树进行遍历并对标签进行操作的实例,都是最 ...
随机推荐
- 洛谷P4725 【模板】多项式对数函数(多项式ln)
题意 题目链接 Sol 这个不用背XD 前置知识: \(f(x) = ln(x), f'(x) = \frac{1}{x}\) \(f(g(x)) = f'(g(x)) g'(x)\) 我们要求的是\ ...
- 利用Fiddler修改请求信息通过Web API执行Dynamics 365操作(Action)实例
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复261或者20170724可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- maven 术语
1, 中央仓库 是一个网络仓库, 用于存储各种 jar 和 maven 插件, 官方网站显示的是列表, 不友好, 一般搜索依赖到一个三方地址: https://mvnrepository.com/ 2 ...
- vue 构建项目遇到的请求本地json问题
在本地测试的json没有问题,但是打包后,发现json 的路径不对了,变成了绝对路径 解决方法: 建立的json文件需要放置 根目录/static下.如项目名/static/data.json,这边 ...
- Android 源码编译之旅
目录 前言 背景 安装软件 正文 Mac 分区 移动硬盘分区 Repo 下载源码 编译 源码导入 Android Studio 查看 碰到的问题 Could not find a supported ...
- NoHttp封装--06 NoHttp之队列、队列优先级
public class Main { /** * 程序入口 */ public void start() { // 第一种,先进先出的队列 // YolandaLinkedQueue queue = ...
- .net 前端gb2312编码,后台获取参数乱码(因为表单提交的时候是utf-8编码 则在后台读取参数时会出现乱码)
在表单中设置编码 ' accept-charset="utf-8" '即可: <form id="login_submit" action=" ...
- WSL优化 (Windows Subsystem for Linux) Linux子系统优化配置
目录 wsl优化 (Windows Subsystem for Linux) Linux子系统优化 1. 永久修改wsl终端字体 2. 修改Linux终端配色 3. 添加WSL到右键菜单 wsl优化 ...
- Reporting Service 2008 “报表服务器数据库内出错。此错误可能是因连接失败、超时或数据库中磁盘空间不足而导致的”
今天遇到了两个关于Reporting Service的问题, 出现问题的环境为Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) .具体情况 ...
- [20181220]使用提示OR_EXPAND优化.txt
[20181220]使用提示OR_EXPAND优化.txt --//链接http://www.itpub.net/thread-2107240-2-1.html,http://www.itpub.ne ...