Prechádzať zdrojové kódy

[update] :heavy_check_mark: restruct

jhao 6 rokov pred
rodič
commit
b2abaf63ca
6 zmenil súbory, kde vykonal 40 pridanie a 51 odobranie
  1. 0 2
      Dockerfile
  2. 36 44
      README.md
  3. 2 2
      helper/check.py
  4. 0 1
      requirements.txt
  5. 1 1
      setting.py
  6. 1 1
      util/webRequest.py

+ 0 - 2
Dockerfile

@@ -18,6 +18,4 @@ COPY . .
 
 EXPOSE 5010
 
-WORKDIR /app/cli
-
 ENTRYPOINT [ "sh", "start.sh" ]

+ 36 - 44
README.md

@@ -1,5 +1,5 @@
 
-ProxyPool 代理IP池
+ProxyPool 爬虫代理IP池
 =======
 [![Build Status](https://travis-ci.org/jhao104/proxy_pool.svg?branch=master)](https://travis-ci.org/jhao104/proxy_pool)
 [![](https://img.shields.io/badge/Powered%20by-@j_hao104-green.svg)](http://www.spiderpy.cn/blog/)
@@ -25,11 +25,11 @@ ProxyPool 代理IP池
 
 * 测试地址: http://118.24.52.95 (单机勿压, 感谢。 恶意访问关[小黑屋](https://github.com/jhao104/proxy_pool/blob/bff423dffe6e2881ee45d5b66d8a6ad682c8e4ab/doc/block_ips.md)哦)
 
-* 有闲心的朋友帮忙点点末尾的[广告](https://tracking.gitads.io/?repo=proxy_pool)哦 :stuck_out_tongue_winking_eye:
+* 有时间的朋友帮忙点下末尾的[推广](https://tracking.gitads.io/?repo=proxy_pool)哦 :stuck_out_tongue_winking_eye:
 
-### 安装
+### 运行项目
 
-#### 下载代码:
+##### 下载代码:
 
 * git clone
 
@@ -40,16 +40,16 @@ git clone git@github.com:jhao104/proxy_pool.git
 * releases
 
 ```bash
-https://github.com/jhao104/proxy_pool/releases 下载zip文件
+https://github.com/jhao104/proxy_pool/releases 下载对应zip文件
 ```
 
-* 安装依赖:
+##### 安装依赖:
 
 ```bash
 pip install -r requirements.txt
 ```
 
-* 修改配置:
+#### 修改配置:
 
 
 ```python
@@ -63,7 +63,7 @@ PORT = 5000                    # 监听端口
 
 # 配置数据库
 
-DB_CONN = 'ssdb://@127.0.0.1:8888'
+DB_CONN = 'redis://@127.0.0.1:8888'
 
 
 # 配置 ProxyFetcher
@@ -75,7 +75,7 @@ PROXY_FETCHER = [
 ]
 ```
 
-* 启动:
+#### 启动项目:
 
 ```bash
 # 如果已经具备运行条件, 可用通过proxyPool.py启动。
@@ -89,26 +89,17 @@ python proxyPool.py server
 
 ```
 
-### Docker
+### Docker运行
 
 ```bash
 docker pull jhao104/proxy_pool
 
-# 远程数据库
-docker run --env db_type=REDIS --env db_host=x.x.x.x --env db_port=6379 --env db_password=pwd_str -p 5010:5010 jhao104/proxy_pool
-
-# 宿主机上的数据库
-docker run --env db_type=REDIS --env db_host=host.docker.internal --env db_port=6379 --env db_password=pwd_str -p 5010:5010 jhao104/proxy_pool
-
+docker run --env DB_CONN=redis://:password@ip:port/db -p 5010:5010 jhao104/proxy_pool:2.1.0
 ```
 
 
 ### 使用
 
-  启动过几分钟后就能看到抓取到的代理IP,你可以直接到数据库中查看,推荐一个[SSDB可视化工具](https://github.com/jhao104/SSDBAdmin)。
-
-  也可以通过api访问http://127.0.0.1:5010 查看。
-
 * Api
 
 | api | method | Description | arg|
@@ -145,54 +136,54 @@ def getHtml():
             return html
         except Exception:
             retry_count -= 1
-    # 出错5次, 删除代理池中代理
+    # 删除代理池中代理
     delete_proxy(proxy)
     return None
 ```
 
 ### 扩展代理
 
-  项目默认包含几个免费的代理获取方法,但是免费的毕竟质量不好,所以如果直接运行可能拿到的代理质量不理想。所以,提供了代理获取的扩展方法。
+  项目默认包含几个免费的代理获取源,但是免费的毕竟质量有限,所以如果直接运行可能拿到的代理质量不理想。所以,提供了代理获取的扩展方法。
 
-  添加一个新的代理获取方法如下:
+  添加一个新的代理方法如下:
 
-* 1、首先在[GetFreeProxy](https://github.com/jhao104/proxy_pool/blob/b9ccdfaada51b57cfb1bbd0c01d4258971bc8352/ProxyGetter/getFreeProxy.py#L32)类中添加你的获取代理的静态方法,
+* 1、首先在[ProxyFetcher](https://github.com/jhao104/proxy_pool/blob/1a3666283806a22ef287fba1a8efab7b94e94bac/fetcher/proxyFetcher.py#L21)类中添加自定义的获取代理的静态方法,
 该方法需要以生成器(yield)形式返回`host:ip`格式的代理,例如:
 
 ```python
 
-class GetFreeProxy(object):
+class ProxyFetcher(object):
     # ....
 
-    # 你自己的方法
+    # 自定义代理源获取方法
     @staticmethod
-    def freeProxyCustom():  # 命名不和已有重复即可
+    def freeProxyCustom1():  # 命名不和已有重复即可
 
-        # 通过某网站或者某接口或某数据库获取代理 任意你喜欢的姿势都行
-        # 假设你拿到了一个代理列表
-        proxies = ["139.129.166.68:3128", "139.129.166.61:3128", ...]
+        # 通过某网站或者某接口或某数据库获取代理
+        # 假设你已经拿到了一个代理列表
+        proxies = ["x.x.x.x:3128", "x.x.x.x:80"]
         for proxy in proxies:
             yield proxy
-        # 确保每个proxy都是 host:ip正确的格式就行
+        # 确保每个proxy都是 host:ip正确的格式返回
 ```
 
-* 2、添加好方法后,修改Config/setting.py文件中的`PROXY_GETTER`项:
+* 2、添加好方法后,修改[setting.py](https://github.com/jhao104/proxy_pool/blob/1a3666283806a22ef287fba1a8efab7b94e94bac/setting.py#L47)文件中的`PROXY_FETCHER`项:
 
-  在`PROXY_GETTER`下添加自定义的方法的名字:
+  在`PROXY_FETCHER`下添加自定义方法的名字:
 
-```shell
-PROXY_GETTER = [
+```python
+PROXY_FETCHER = [
     "freeProxy01",    
     "freeProxy02",
-    ....
-    "freeProxyCustom"  #  # 确保名字和你添加方法名字一致
+    # ....
+    "freeProxyCustom1"  #  # 确保名字和你添加方法名字一致
 ]
 ```
 
 
-  `ProxySchedule`会每隔一段时间抓取一次代理,下次抓取时会自动识别调用你定义的方法。
+  `schedule` 进程会每隔一段时间抓取一次代理,下次抓取时会自动识别调用你定义的方法。
 
-### 代理采集
+### 免费代理源
 
    目前实现的采集免费代理网站有(排名不分先后, 下面仅是对其发布的免费代理情况, 付费代理测评可以参考[这里](https://zhuanlan.zhihu.com/p/33576641)): 
    
@@ -202,7 +193,7 @@ PROXY_GETTER = [
   | 66代理   | 可用  | 更新很慢   |   *     |  否      | [地址](http://www.66ip.cn/) |
   | 西刺代理 | 可用   | 几分钟一次 |   *     | 否       | [地址](http://www.xicidaili.com)|
   | 全网代理 |  可用  | 几分钟一次 |   *     |  否      | [地址](http://www.goubanjia.com/)|
-  | 训代理 |  已关闭免费代理  | * |   *     |  否      | [地址](http://www.xdaili.cn/)|
+  | ~~训代理~~ |  已关闭免费代理  | * |   *     |  否      | [地址](http://www.xdaili.cn/)|
   | 快代理 |  可用  |几分钟一次|   *     |  否      | [地址](https://www.kuaidaili.com/)|
   | 云代理 |  可用  |几分钟一次|   *     |  否      | [地址](http://www.ip3366.net/)|
   | IP海 |  可用  |几小时一次|   *     |  否      | [地址](http://www.iphai.com/)|
@@ -215,7 +206,7 @@ PROXY_GETTER = [
 
 ### 问题反馈
 
-  任何问题欢迎在[Issues](https://github.com/jhao104/proxy_pool/issues) 中反馈,如果没有账号可以去 我的[博客](http://www.spiderpy.cn/blog/message)中留言。
+  任何问题欢迎在[Issues](https://github.com/jhao104/proxy_pool/issues) 中反馈,同时也可以到我的[博客](http://www.spiderpy.cn/blog/message)中留言。
 
   你的反馈会让此项目变得更加完美。
 
@@ -223,7 +214,7 @@ PROXY_GETTER = [
 
   本项目仅作为基本的通用的代理池架构,不接收特有功能(当然,不限于特别好的idea)。
 
-  本项目依然不够完善,如果发现bug或有新的功能添加,请在[Issues](https://github.com/jhao104/proxy_pool/issues)中提交bug(或新功能)描述,在确认后提交你的代码
+  本项目依然不够完善,如果发现bug或有新的功能添加,请在[Issues](https://github.com/jhao104/proxy_pool/issues)中提交bug(或新功能)描述,我会尽力改进,使她更加完美
 
   这里感谢以下contributor的无私奉献:
 
@@ -234,6 +225,7 @@ PROXY_GETTER = [
 
    [release notes](https://github.com/jhao104/proxy_pool/blob/master/doc/release_notes.md)
 
-### [AD](https://tracking.gitads.io/?repo=proxy_pool)
+### AD
 
-[![AD](https://images.gitads.io/proxy_pool)](https://tracking.gitads.io/?repo=proxy_pool)
+  最后, 开源不易, 有时间的小伙伴可以点下[推广](https://tracking.gitads.io/?repo=proxy_pool)广告。
+  [![AD](https://images.gitads.io/proxy_pool)](https://tracking.gitads.io/?repo=proxy_pool)

+ 2 - 2
helper/check.py

@@ -93,12 +93,12 @@ class Checker(Thread):
                     if proxy.fail_count > self.conf.maxFailCount:
                         self.log.info('ProxyCheck - {}  : {} fail, count {} delete'.format(self.name,
                                                                                            proxy.proxy.ljust(23),
-                                                                                           self.conf.maxFailCount))
+                                                                                           proxy.fail_count))
                         self.proxy_handler.delete(proxy)
                     else:
                         self.log.info('ProxyCheck - {}  : {} fail, count {} keep'.format(self.name,
                                                                                          proxy.proxy.ljust(23),
-                                                                                         self.conf.maxFailCount))
+                                                                                         proxy.fail_count))
                         self.proxy_handler.put(proxy)
             self.queue.task_done()
 

+ 0 - 1
requirements.txt

@@ -6,5 +6,4 @@ lxml==4.3.1
 PyExecJS==1.5.1
 click==7.0
 gunicorn==19.9.0
-pymongo
 redis

+ 1 - 1
setting.py

@@ -30,7 +30,7 @@ SHOW_CONFIG = True            # print key config
 # ############### server config ###############
 HOST = "0.0.0.0"
 
-PORT = 5000
+PORT = 5010
 
 # ############### db config ###################
 # db connection uri

+ 1 - 1
util/webRequest.py

@@ -59,7 +59,7 @@ class WebRequest(object):
                 'Connection': 'keep-alive',
                 'Accept-Language': 'zh-CN,zh;q=0.8'}
 
-    def get(self, url, header=None, retry_time=5, retry_interval=5, timeout=10, *args, **kwargs):
+    def get(self, url, header=None, retry_time=3, retry_interval=5, timeout=5, *args, **kwargs):
         """
         get method
         :param url: target url