獲取網頁中IP資源
簡介
應對增量/離線爬蟲業務場景,其特點是對時間要求低,併發大,IP代理資源需求多,如果減少成本是重點問題,調查發現網上許多免費的IP代理資源,可以運用爬蟲技術適當的採集、驗證、使用。但是免費資源性能低,經過驗證之後可用資源少,需要大量數據源配置,但帶來了解析問題,如何運用適當的解析方式,統一清洗可靠的IP資源,是一個問題。
解決方案
一、採用機器學習文本分類進行:精度不足,訓練成本高
二、採用多重正則識別:準確度稍差,對反屏蔽支持較低
多重正則識別網頁中的IP資源
# -*- coding:utf-8 -*-
import re
def get_html(h_str):
txt = h_str
m = re.findall(r'<.+?>', txt, re.M | re.I)
for i in m:
if "none" in i:
m1 = re.findall(r'' + i + '(.*?)</', txt, re.M | re.I)
print("m1:", m1)
for x in m1:
if x == '':
m1.remove(x)
for j in m1:
print("m1:", i + j)
txt = txt.replace(i + j, "")
result = re.compile(r'<.+?>', re.S).sub('', txt)
res = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b:[0-9]{1,5}", result)
ip_list = []
if res == []:
res = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", result)
for i in res:
m1 = re.findall(r'^.*?([0-9]{2,5})', result.split(i)[1], re.M | re.I)[0]
ip_list.append(str(i) + ":" + str(m1))
else:
ip_list = res
return ip_list
if __name__ == "__main__":
h_str = '''<tbody>
<tr>
<td>125.62.193.209:83</td>
<td>高匿名ip代理</td>
<td>HTTP,HTTPS</td>
<td>中國 北京 北京 UCloud/聯通/電信 代理ip</td>
<td>6.73</td>
<td>27天 13小時 50分鐘 3秒</td>
<td>2019年10月22日 20:09</td>
<td>6992</td>
</tr>
<tr>
<td>
<p style="display:block; ">123.62.193.209:83</p><div style="display:none;">2</div>
</td>
<td>高匿名ip代理</td>
<td>HTTP,HTTPS</td>
<td>中國 北京 北京 UCloud/聯通/電信 代理ip</td>
<td>6.73</td>
<td>27天 13小時 50分鐘 3秒</td>
<td>2019年10月22日 20:09</td>
<td>6992</td>
</tr>
</tbody>
'''
print(get_html(h_str))
輸出結果
['125.62.193.209:83', '123.62.193.209:83']