golang爬取免费的代理IP,并验证代理IP是否可用

这里选择爬取西刺的免费代理Ip,并且只爬取了一页,爬取的时候不设置useAgent西刺不会给你数据,西刺也做反爬虫处理了,所以小心你的IP被封掉

代码:

package main

import (
"fmt"
"github.com/PuerkitoBio/goquery"
"net/http"
"net/url"
"strings"
) var total, useful int = ,
var status = make(chan int) func main() { xcurl := "http://www.xicidaili.com/wt/"
request, _ := http.NewRequest("GET", xcurl, nil)
request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0") cli1 := &http.Client{}
response, err := cli1.Do(request)
if err != nil {
fmt.Println(err)
} dom, _ := goquery.NewDocumentFromResponse(response) dom.Find("#ip_list tbody tr").Each(func(i int, context *goquery.Selection) {
ip := context.Find("td").Eq().Text()
port := context.Find("td").Eq().Text()
httpType := context.Find("td").Eq().Text()
proxyIp := strings.ToLower(httpType) + "://" + ip + ":" + port
// nim := context.Find("td").Eq(4).Text() //是否是高匿,高匿的可以隐藏你的原始IP if ip != "" && port != "" {
total++
go checkProxyIP(proxyIp, i)
}
}) for i := ; i < total; i++ {
<-status
}
fmt.Println("num=", total, "\nuseful=", useful)
fmt.Println("END!")
} func checkProxyIP(proxyIp string, i int) {
req, _ := http.NewRequest("GET", "http://test.bestbing.cn/", nil) //这里自己搭个web服务验证代理是否可用
proxy, _ := url.Parse(proxyIp)
cli2 := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxy),
},
}
resp, _ := cli2.Do(req) if resp != nil && resp.StatusCode == {
buf := make([]byte, )
n, _ := resp.Body.Read(buf)
reStr := string(buf[:n]) if reStr == "Hello World" { //验证代理有没有做手脚,可能给你返回一堆广告
useful++
fmt.Println(proxyIp)
} }
status <- i
}

西刺上的代理IP只有一部分可用,另外高匿IP可用于反爬虫,但是西刺中有的高匿IP是广告陷阱,所以获取代理IP后最好自己搭个服务器验证一下,自己的服务器可以看到请求的原IP,检查是否匿了

 

golang爬取免费代理IP的更多相关文章

  1. 极简代理IP爬取代码——Python爬取免费代理IP

    这两日又捡起了许久不碰的爬虫知识,原因是亲友在朋友圈拉人投票,点进去一看发现不用登陆或注册,觉得并不复杂,就一时技痒搞一搞,看看自己的知识都忘到啥样了. 分析一看,其实就是个post请求,需要的信息都 ...

  2. 简单爬虫-爬取免费代理ip

    环境:python3.6 主要用到模块:requests,PyQuery 代码比较简单,不做过多解释了 #!usr/bin/python # -*- coding: utf-8 -*- import ...

  3. PHP简单爬虫 爬取免费代理ip 一万条

    目标站:http://www.xicidaili.com/ 代码: <?php require 'lib/phpQuery.php'; require 'lib/QueryList.php'; ...

  4. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...

  5. 第二篇 - python爬取免费代理

    代理的作用参考https://wenda.so.com/q/1361531401066511?src=140 免费代理很多,但也有很多不可用,所以我们可以用程序对其进行筛选.以能否访问百度为例. 1. ...

  6. Python 爬虫练习(一) 爬取国内代理ip

    简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ...

  7. C#多线程爬虫抓取免费代理IP

    这里用到一个HTML解析辅助类:HtmlAgilityPack,如果没有网上找一个增加到库里,这个插件有很多版本,如果你开发环境是使用VS2005就2.0的类库,VS2010就使用4.0,以此类推.. ...

  8. vb.net 多线程爬虫抓取免费代理IP

    Class Program Public Shared masterPorxyList As List(Of proxy) = New List(Of proxy)() Public Class pr ...

  9. 码农代理免费代理ip端口字段js加密破解

    起因 之前挖过爬取免费代理ip的坑,一个比较帅的同事热心发我有免费代理ip的网站,遂研究了下:https://proxy.coderbusy.com/. 解密 因为之前爬过类似的网站有了些经验,大概知 ...

随机推荐

  1. ehcache注解全面解析---打酱油的日子

    通过ehcache以编程方式使用缓存: 跟上面的方式相同,但是缓存通过ehcache去管理,当然比使用map有N多种好处,比如缓存太大了快达到上限之后,将哪一部分缓存清除出去.这种方式完全是通过代码的 ...

  2. NSTimer整理总结

    对于定时器NSTimer,我们大家都不会陌生,在使用的时候,我们常常会遇到一些坑,例如:在Scrollview拖动时,timer会暂停:在子线程中如何创建一个定时器等.针对于一些我们所遇到的坑,我来总 ...

  3. 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...

  4. iptraf:TCP/UDP网络监控工具

    原文:http://www.unixmen.com/iptraf-tcpudp-network-monitoring-utility/ 作者: Enock Seth Nyamador 译文:LCTT  ...

  5. 现代程序设计——homework-02

    关于题目: 题目地址:http://www.cnblogs.com/xinz/p/3318230.html 首先,不得不说自从写完第一次作业,我就开始“抠”这个题,第一眼看这个题就感觉好“坑”,读一遍 ...

  6. SQL错误:sql server 目录名无效

    今天遇到一个错误,在网上找了半天,还有人说需要重装sql.我出错误的是网站服务器..重装影响太大了.想找一个比较不影响网站运作的办法.终于也不负我努力(啊喂!其实满百度都是可是你看不懂好吧!)找到了一 ...

  7. 从foreach语句枚举元素看数组

    在foreach语句中使用枚举,可以迭代数组或集合中的元素,且无须知道集合中的元素的个数.如图显示了调用foreach方法的客户端和集合之间的关系.数组或集合实现带GetEnumerator()方法的 ...

  8. java内存管理(堆、栈、方法区)

    java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...

  9. php中AJAX请求中使用post和get请求的区别

    之前使用这两个请求的时候,主要从几个方面考虑: 1.语义,get就是从服务器获取,一般就是获取/查询资源信息.post就是提交给服务器,一般就是更新资源信息. 2.请求文件大小,get一般只有2k这样 ...

  10. Android 自定义标题栏

    开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮的点击事件 一.代码 这里先介绍一下流程 ...