自己新建代理池拼采用python调用访问网页-泓源视野

自己新建代理池拼采用python调用访问网页

项目地址https://github.com/lvwuwei/AutoBuy/tree/master/ProxyPool

采用googleshell安装注意1,无法使用外网端口访问

安装pip3 install -r requirements.txt 其中 版本lxml有冲突,采用pip3 uninstall lxml然后再安装指定版本pip3 install lxml==4.6.4 或者3.5

安装好用需要安装apt-get install redis服务器 然后运行服务器redis-server

可以看到 Redis、Getter、Server、Tester 都已经启动成功。

然后再开一个terminal再运行sudo python3 run.py 或者转换超级用户su然后root用户下在python3 run.py

注意使用screen -S proxy创建后台执行任务!

这时候访问 http://localhost:5555/random 即可获取一个随机可用代理。

 


使用

爬取数据包在/AutoBuy/ProxyPool/proxypool/crawlers/public/

http://www.66ip.cn/{page}.html

 

成功运行之后可以通过 http://localhost:5555/random 获取一个随机可用代理。

可以用程序对接实现,下面的示例展示了获取代理并爬取网页的过程:

import requestsproxypool_url = 'http://127.0.0.1:5555/random'target_url = 'http://httpbin.org/get'def get_random_proxy(): """ get random proxy from proxypool :return: proxy """ return requests.get(proxypool_url).text.strip()def crawl(url, proxy): """ use proxy to crawl page :param url: page url :param proxy: proxy, such as 8.8.8.8:8888 :return: html """ proxies = {'http': 'http://' + proxy} return requests.get(url, proxies=proxies).textdef main(): """ main method, entry point :return: none """ proxy = get_random_proxy() print('get random proxy', proxy) html = crawl(target_url, proxy) print(html)if __name__ == '__main__': main()

运行结果如下:

get random proxy 116.196.115.209:8080
{ "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0", "X-Amzn-Trace-Id": "Root=1-5e4d7140-662d9053c0a2e513c7278364" }, "origin": "116.196.115.209", "url": "https://httpbin.org/get"
}

可以看到成功获取了代理,并请求 httpbin.org 验证了代理的可用性。

可配置项

代理池可以通过设置环境变量来配置一些参数。

开关

  • ENABLE_TESTER:允许 Tester 启动,默认 true
  • ENABLE_GETTER:允许 Getter 启动,默认 true
  • ENABLE_SERVER:运行 Server 启动,默认 true

环境

  • APP_ENV:运行环境,可以设置 dev、test、prod,即开发、测试、生产环境,默认 dev
  • APP_DEBUG:调试模式,可以设置 true 或 false,默认 true

Redis 连接

  • REDIS_HOST:Redis 的 Host
  • REDIS_PORT:Redis 的端口
  • REDIS_PASSWORD:Redis 的密码
  • REDIS_DB:Redis 的数据库索引,如 0、1
  • REDIS_CONNECTION_STRING:Redis 连接字符串
  • REDIS_KEY:Redis 储存代理使用字典的名称

处理器

  • CYCLE_TESTER:Tester 运行周期,即间隔多久运行一次测试,默认 20 秒
  • CYCLE_GETTER:Getter 运行周期,即间隔多久运行一次代理获取,默认 100 秒
  • TEST_URL:测试 URL,默认百度
  • TEST_TIMEOUT:测试超时时间,默认 10 秒
  • TEST_BATCH:批量测试数量,默认 20 个代理
  • TEST_VALID_STATUS:测试有效的状态吗
  • API_HOST:代理 Server 运行 Host,默认 0.0.0.0
  • API_PORT:代理 Server 运行端口,默认 5555
  • API_THREADED:代理 Server 是否使用多线程,默认 true

日志

  • LOG_DIR:日志相对路径
  • LOG_RUNTIME_FILE:运行日志文件名称
  • LOG_ERROR_FILE:错误日志文件名称

以上内容均可使用环境变量配置,即在运行前设置对应环境变量值即可,如更改测试地址和 Redis 键名:

export TEST_URL=http://weibo.cnexport REDIS_KEY=proxies:weibo

即可构建一个专属于微博的代理池,有效的代理都是可以爬取微博的。


安装redis错误 再ubuntu20中 安装 apt-get install redis 然后启动redis-server 发现错误 就是没错误

查看版本redis-server -V

本文由 泓源视野 作者:admin 发表,其版权均为 泓源视野 所有,文章内容系作者个人观点,不代表 泓源视野 对观点赞同或支持。如需转载,请注明文章来源。
21
admin

发表评论

Protected with IP Blacklist CloudIP Blacklist Cloud
您是第8231762 位访客, 您的IP是:[18.97.14.87]