python regex API拉取并转换为文本格式时出错



我有一个简单的python代码,可以从开源api中提取一些恶意软件源,并从该列表中找到唯一的IP。

url已经包含IP,但当您捕获并保存在本地文件中时,您可以看到在每个IP之后\r\n都有其他字符串。这可能是因为新行。有人能指导我吗,因为我是Python的新手,我在这里做错了什么?

import urllib.request
import urllib.parse
import re

url = 'http://www.malwaredomainlist.com/hostslist/ip.txt'
resp = urllib.request.urlopen(url)
ip = re.findall(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}', resp)
malwareIPList = ip.read()
print (malwareIPlist)

错误第223行,在findallreturn compile(模式,标志(.findall(字符串(TypeError:应为字符串或字节,如对象

问题是您需要从urllib.request.urlopen.read()resp

考虑:

import urllib.request
import urllib.parse
import re

url = 'http://www.malwaredomainlist.com/hostslist/ip.txt'
resp = urllib.request.urlopen(url)
print(resp)

打印:

<http.client.HTTPResponse object at 0x103a4ccf8>

我想你正在寻找的是:

url = 'http://www.malwaredomainlist.com/hostslist/ip.txt'
resp = urllib.request.urlopen(url)
ip = re.findall(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}', str(resp.read(), 'utf-8'))
print (ip)

打印一组IP地址。。。


BTW,因为数据是由rn分隔的ip地址,所以实际上不需要正则表达式。你可以做:

>>> str(resp.read(), 'utf-8').splitlines()
['103.14.120.121', '103.19.89.55', '103.224.212.222', '103.24.13.91', ...]

最新更新