目录
项目准备
项目需要准备
代理池 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来代理爬取不同的内容了