獲取網頁中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']
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章