获取网页中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']