服务器搭建代理池进行爬虫

项目准备

项目需要准备

代理池 redis服务 测试爬虫脚本

代理池

代理池来源于github上的项目:proxy_poll。其中收集了相当多的免费代理,可以直接使用。

redis服务

redis服务这里采用docker拉取,并暴露6380端口供代理池使用。

拉取redis image

docker pull redis

本地启动redis服务

此处设置redis的登录密码为”mima", 监听端口为6380

docker run --name python-redis -d -p 6380:6379 redis --requirepass "mima"

检验是否启动成功

docker ps

进入检验是否redis能够使用

docker exec -it python-redis /bin/bash # 进入redis交互程序 redis-cli # 登录 auth mima # 检验是否可用 ping # 返回pong 说明redis可用 => pong

爬虫脚本

创建ip-spider.py的文件进行ip地址测试

import requests from lxml import etree def get_proxy(): return requests.get(":5010/get/").json() def delete_proxy(proxy): requests.get(":5010/delete/?proxy={}".format(proxy)) # your spider code def get_html(url): # .... retry_count = 5 proxy = get_proxy().get("proxy") while retry_count > 0: try: html = requests.get(url, proxies={"http": "http://{}".format(proxy)}) # 使用代理访问 return html except Exception: retry_count -= 1 # 删除代理池中代理 delete_proxy(proxy) return None def get_ip(): url = "?wd=ip&rsv_spt=1&rsv_iqid=0xca0f248ff5&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=3&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=430&rsv_sug4=1173" page_context = get_html(url).text print("抓取成功") page = etree.HTML(page_context) ip = page.xpath(//tr/td/span[@class="c-gap-right"]/text()) print(ip) if __name__ == "__main__": get_ip()

项目开始

拉取proxy_pool仓库的源文件

新建本地项目目录,拉取源文件

git clone

切换至项目目录

cd proxy_pool

安装依赖

pip3 install -r requirements.txt

更新配置文件

vim setting.py

更新需要调整的配置文件如下

控制proxy_pool服务启动在5010端口

# setting.py 为项目配置文件 # 配置API服务 HOST = "0.0.0.0" # IP PORT = 5010 # 监听端口 # 配置数据库 #这里我们设置redis的地址,其中mima是redis的登录密码,6380是redis启动的端口号, 2 是使用的database(redis启用时默认会创建16个database) DB_CONN = redis://:[email protected]:6380/2

然后需要后台执行proxy_pool的服务。

nohub用于后台启动服务,不会因命令行关闭而退出

分别需要启动**schedule**和**server**

nohup python3 proxyPool.py schedule > schedule.file 2>&1 nohup python3 proxyPool.py server > server.file 2>&1 &

此时服务启动完成

检验服务是否启动成功

curl :5010/get/

如果启动成功,则会返回类似的json串

{"check_count":79,"fail_count":0,"last_status":1,"last_time":"2020-12-24 16:04:16","proxy":"101.201.31.208:80","region":"","source":"","type":""}

如果不正确,则可以进入`schedule.file`和`server.file`来查看日志文件。

失败后需要手动关闭进程

# 查看后台进程 jobs -l # 杀死进程 kill -9 [id]

验证是否代理爬虫成功

进入ip-spider.py所在文件夹

重复执行

python3 ip-spider.py

如果返回不同的

抓取成功 [本机IP:\xa0171.35.148.193]

则恭喜,成功啦~(需要注意,这个可能会有失败的情况)

以后可以修改ip-spider.py来代理爬取不同的内容了