对于爬虫来说,由于爬虫爬取速度过快,在爬取过程中可能遇到同一个IP访问过于频繁的问题,此时网站就会让我们输入验证码登录或者直接封锁IP,这样会给爬取带来极大的不便。
使用代理隐藏真实的IP,让服务器误以为是代理服务器在请求自己。这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果。
1. 免费代理
免费代理大多数情况下都是不好用的,所以比较靠谱的方法是购买付费代理。
1.1 开源项目 proxy_pool
1.1.1 安装和启动
1 2 3 4 5
| docker pull jhao104/proxy_pool
docker run -d --name redis -p 6379:6379 redis:latest --requirepass "123456" docker run --env DB_CONN=redis://:123456@172.17.0.1:6379/1 -p 5010:5010 --name proxy_pool jhao104/proxy_pool:latest
|
1.1.2 使用
docker 启动后, 通过访问本地的接口, 就可以得到 ip
1
| http://127.0.0.1:5010/get/
|
或者用作者给出的测试地址: http://118.24.52.95/get/
2. 付费代理
2.1 芝麻代理
3. 代码
3.1 golang
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| package main
import ( "fmt" "io/ioutil" "log" "net/http" "net/url" "time" )
func main() {
proxy, err := url.Parse("http://代理ip:代理端口") if err != nil { log.Fatal(err) }
httpClient := &http.Client{ Timeout: time.Second * 10, Transport: &http.Transport{ Proxy: http.ProxyURL(proxy), }, }
res, err := httpClient.Get("https://www.baidu.com") if err != nil { log.Println(err) return } defer res.Body.Close() if res.StatusCode != http.StatusOK { log.Println(err) return } c, _ := ioutil.ReadAll(res.Body) fmt.Println(string(c)) }
|
4. 参考资料