2011-06-09 97 views
2

我有IP:PORT列表在HTML中,當我使用findall搜索所有IP我得到所有IP becouse IP列表是唯一的,一些端口是相同的,我通過例子列出了100個IP,只有87個端口。如何找到重複的所有端口?re.findall如何返回重複的匹配

proxies = re.findall("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}",html) 

ports = re.findall("[0-9]{1,3}\,[0-9]{1,3}\,[0-9]{1,3}\,[0-9]{1,3}",html) 
#ports are coded to looks like this 47,46,47,46 

print len(proxies) 
print len(ports) 
+2

你能證明你正在使用找到比賽和修整非唯一結果的代碼? – unholysampler 2011-06-09 19:57:32

+0

你能提供一些樣本數據嗎?完全有可能你可以一次拿到兩套,但看到輸入會使這個決定容易得多。 – 2011-06-09 20:08:16

+0

但是爲什麼不找組合IP:Port的所有字符串,然後簡單地按照需要分割結果? – 2011-06-09 20:13:26

回答

2

沒有看到源文件,我只能提出一些基本觀點。

  • 端口號不限於3個數字,所以你在排除999
  • 任何端口做端口號只顯示爲4個端口的列表?你說格式是IP:PORT的列表,但這不是你正在檢查的內容。

編輯:

看網頁的源更仔細。有些條目沒有4個端口號。

<tr> 
    <td class="t_ip">151.9.233.6</td> 
    <td class="t_port">50,42</td> 
    <td class="t_country"><img src="/images/flags/it.png" alt="it" />Italy</td> 
    <td class="t_anonymity"> 

      High 

    </td> 
    <td class="t_https">-</td> 
    <td class="t_checked">00:02:16</td> 
    <td class="t_check"> 
     <a href="" class="a_check" >check</a> 
    </td> 
</tr> 

它也似乎將是一個更容易檢查class="t_ip"class="t_port",抓住元素的內容。

<td class="t_ip">(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td> 
<td class="t_port">((\d,?)+)</td> 

注: IP地址表達式將匹配無效的IP地址。

+0

req = urllib.urlopen(「http://proxyhttp.net/」) html = req.read() – bertrand 2011-06-09 20:11:48

+0

@bertrand:查看我的編輯瞭解更多信息。 – unholysampler 2011-06-09 20:18:04

+0

你是對的,謝謝你:) – bertrand 2011-06-09 20:25:54

0

不知道這會幫助你太多,只是另一種選擇:

txt = """ 
<tr> 
    <td class="t_ip">151.9.233.6</td> 
    <td class="t_port">50,42</td> 
    <td class="t_country"><img src="/images/flags/it.png" alt="it" />Italy</td> 
    <td class="t_anonymity"> 

      High 

    </td> 
    <td class="t_https">-</td> 
    <td class="t_checked">00:02:16</td> 
    <td class="t_check"> 
     <a href="" class="a_check" >check</a> 
    </td> 
</tr>  
""" 

txt = [line.strip() for line in txt.split('\n')] 

#clstaglen = len('</td>') => 5 
getVals = lambda startTxt: [line[len(startTxt):len(line)-5] for line in txt if line.startswith(startTxt)] 

print getVals('<td class="t_ip">') 
print getVals('<td class="t_port">')