Răsfoiți Sursa

[update] add guobanji proxy

jhao104 9 ani în urmă
părinte
comite
2ffbe46b03
2 a modificat fișierele cu 41 adăugiri și 5 ștergeri
  1. 19 5
      ProxyGetter/getFreeProxy.py
  2. 22 0
      README.md

+ 19 - 5
ProxyGetter/getFreeProxy.py

@@ -46,11 +46,12 @@ def freeProxySecond(proxy_number=100):
     :return:
     """
     url = "http://m.66ip.cn/mo.php?sxb=&tqsl={}&port=&export=&ktip=&sxa=&submit=%CC%E1++%C8%A1&textarea=".format(
-        proxy_number)
+            proxy_number)
     html = requests.get(url).content
     for proxy in re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4}', html):
         yield proxy
 
+
 # 有代理
 @robustCrawl
 def freeProxyThird(days=1):
@@ -68,6 +69,7 @@ def freeProxyThird(days=1):
         for proxy in proxy_list:
             yield proxy
 
+
 # 西刺
 @robustCrawl
 def freeProxyFourth():
@@ -78,11 +80,23 @@ def freeProxyFourth():
     url = "http://api.xicidaili.com/free2016.txt"
     html = requests.get(url).content
     for proxy in re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4}', html):
-            yield proxy
+        yield proxy
 
-if __name__ == '__main__':
-    for e in freeProxyFourth():
-        print e
 
+# guobanjia
+@robustCrawl
+def freeProxyFifth():
+    """
+    抓取guobanjia http://www.goubanjia.com/free/gngn/index.shtml
+    :return:
+    """
+    url = "http://www.goubanjia.com/free/gngn/index.shtml"
+    tree = getHtmlTree(url)
+    proxy_list = tree.xpath('.//td[@class="ip"]')
+    for proxy in proxy_list:
+        yield ''.join(proxy.xpath('.//text()'))
 
 
+if __name__ == '__main__':
+    for e in freeProxyFifth():
+        print e

+ 22 - 0
README.md

@@ -0,0 +1,22 @@
+## 简易代理池服务
+
+> 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速稳定的运行,当然在公司做的东西不能开源出来。不过呢,闲暇时间手痒,所以就想利用一些免费的资源搞一个简单的代理池服务。
+
+### 问题
+
+* 代理IP从何而来?
+
+  刚自学爬虫的时候没有代理IP就去西刺、快代理之类有免费代理的网站去爬,还是有个别代理能用。当然,如果你有更好的代理接口也可以自己接入。
+  免费代理的采集也很简单,无非就是:访问页面页面 —> 正则/xpath提取 —> 保存
+
+* 如何保证代理质量?
+
+  可以肯定免费的代理IP大部分都是不能用的,不然别人为什么还提供付费的(不过事实是很多代理商的付费IP也不稳定,也有很多是不能用)。所以采集回来的代理IP不能直接使用,可以写检测程序不断的去用这些代理访问一个稳定的网站,看是否可以正常使用。这个过程可以使用多线程或异步的方式,因为检测代理是个很慢的过程。
+
+* 采集回来的代理如何存储?
+
+  这里不得不推荐一个高性能支持多种数据结构的NoSQL数据库SSDB,用于代理Redis。支持队列、hash、set、k-v对,支持T级别数据。是做分布式爬虫很好中间存储工具。
+
+* 如何让爬虫更简单的使用这些代理?
+
+  答案肯定是做成服务咯,python有这么多的web框架,随便拿一个来写个api供爬虫调用。这样有很多好处,比如:当爬虫发现代理不能使用可以主动通过api去delete代理IP,当爬虫发现代理池IP不够用时可以主动去refresh代理池。这样比主动检测程序更加靠谱。