使用 Regex 和 python 解析代理地址
parsing proxy adress with Regex and python
我试图通过解析包含隐藏在大量无用文本中的 ip 和端口的字符串来检索代理的地址。
在多次尝试失败后,我开始研究正则表达式。
def parseLine(line):
stock = []
listpat = ["\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", "^(6553[0-5]|655[0-2]\d|65[0-4]\d\d|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)$ "] #ip, port
for elem in line:
for pat in listpat:
result = re.match(pat, elem)
if result:
stock.append(result)
with open('list.csv', 'a') as f:
writer = csv.writer(f)
for cell in stock:
writer.writerows(cell)
这两个正则表达式分别是IP和端口的模式。
这是我正在研究的字符串的示例:
<tr class="odd"><td><input id="row1" name="c1" onclick="choice()" type="checkbox" value="2057281.204.168.1069921863141"/></td><td>201.204.168.106<script type="text/javascript">document.write(":"+t+w+q+p+q)</script></td><td>high-anonymous</td><td><dfn title="01:09:16 AM GMT">Jun-19-2020</dfn></td><td>Costa Rica</td><td class="organization">San Antonio De Belen</td></tr>
我唯一感兴趣的信息是
201.204.168.106
the result of <script type="text/javascript">document.write(":"+t+w+q+p+q)</script>
我的错误是什么?
您正在寻找 re.search() / re.findall()
而不是 re.match()
。后者将表达式绑定到它找不到任何地址的字符串的开头。请参阅以下工作代码:
import re
string = """
<tr class="odd"><td><input id="row1" name="c1" onclick="choice()" type="checkbox" value="2057281.204.168.1069921863141"/></td><td>201.204.168.106<script type="text/javascript">document.write(":"+t+w+q+p+q)</script></td><td>high-anonymous</td><td><dfn title="01:09:16 AM GMT">Jun-19-2020</dfn></td><td>Costa Rica</td><td class="organization">San Antonio De Belen</td></tr>
"""
rx = re.compile(r'(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)')
for possible_ip in rx.findall(string):
print(possible_ip)
产生
201.204.168.106
我试图通过解析包含隐藏在大量无用文本中的 ip 和端口的字符串来检索代理的地址。 在多次尝试失败后,我开始研究正则表达式。
def parseLine(line):
stock = []
listpat = ["\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", "^(6553[0-5]|655[0-2]\d|65[0-4]\d\d|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)$ "] #ip, port
for elem in line:
for pat in listpat:
result = re.match(pat, elem)
if result:
stock.append(result)
with open('list.csv', 'a') as f:
writer = csv.writer(f)
for cell in stock:
writer.writerows(cell)
这两个正则表达式分别是IP和端口的模式。 这是我正在研究的字符串的示例:
<tr class="odd"><td><input id="row1" name="c1" onclick="choice()" type="checkbox" value="2057281.204.168.1069921863141"/></td><td>201.204.168.106<script type="text/javascript">document.write(":"+t+w+q+p+q)</script></td><td>high-anonymous</td><td><dfn title="01:09:16 AM GMT">Jun-19-2020</dfn></td><td>Costa Rica</td><td class="organization">San Antonio De Belen</td></tr>
我唯一感兴趣的信息是
201.204.168.106
the result of
<script type="text/javascript">document.write(":"+t+w+q+p+q)</script>
我的错误是什么?
您正在寻找 re.search() / re.findall()
而不是 re.match()
。后者将表达式绑定到它找不到任何地址的字符串的开头。请参阅以下工作代码:
import re
string = """
<tr class="odd"><td><input id="row1" name="c1" onclick="choice()" type="checkbox" value="2057281.204.168.1069921863141"/></td><td>201.204.168.106<script type="text/javascript">document.write(":"+t+w+q+p+q)</script></td><td>high-anonymous</td><td><dfn title="01:09:16 AM GMT">Jun-19-2020</dfn></td><td>Costa Rica</td><td class="organization">San Antonio De Belen</td></tr>
"""
rx = re.compile(r'(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)')
for possible_ip in rx.findall(string):
print(possible_ip)
产生
201.204.168.106