0%

爬虫IP代理池

对于爬虫来说,由于爬虫爬取速度过快,在爬取过程中可能遇到同一个IP访问过于频繁的问题,此时网站就会让我们输入验证码登录或者直接封锁IP,这样会给爬取带来极大的不便。

使用代理隐藏真实的IP,让服务器误以为是代理服务器在请求自己。这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果。

1. 免费代理

免费代理大多数情况下都是不好用的,所以比较靠谱的方法是购买付费代理。

1.1 开源项目 proxy_pool

1.1.1 安装和启动
1
2
3
4
5
docker pull jhao104/proxy_pool

#依赖redis, 所以要先安装 redis
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. 参考资料

给作者打赏,可以加首页微信,咨询作者相关问题!