Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3-从动态网页中提取IP地址和端口号_Python 3.x - Fatal编程技术网

Python 3.x Python3-从动态网页中提取IP地址和端口号

Python 3.x Python3-从动态网页中提取IP地址和端口号,python-3.x,Python 3.x,我想从这个链接中提取IP地址和端口号。以下是我的Python代码: 输出- ['37.59.0.139','212.47.239.185','85.248.227.165','167.114.250.199','51.15.86.160','212.83.164.85','82.224.48.173'] 我只得到IP地址,但没有端口号 我期待这样的事情-'37.59.0.139:17658'首先,你的正则表达式有点不稳定:你有(?:,你可能是指(:?。不确定前者是什么意思,但后者意味着零或一:

我想从这个链接中提取IP地址和端口号。以下是我的Python代码:

输出- ['37.59.0.139','212.47.239.185','85.248.227.165','167.114.250.199','51.15.86.160','212.83.164.85','82.224.48.173']

我只得到IP地址,但没有端口号


我期待这样的事情-'37.59.0.139:17658'

首先,你的正则表达式有点不稳定:你有
(?:
,你可能是指
(:?
。不确定前者是什么意思,但后者意味着零或一

您的正则表达式只查找按
拆分的四组数字。您最多需要五组数字:
0.0.0.0:0000
=五组。请尝试以下操作:

re.findall( r'([0-9]{1,3}\.){3}[0-9]{1,3}(:[0-9]{2,4})?'
  • [0-9]{1,3}
    =介于一位和三位之间
  • \.
    =句点(转义,因为
    表示“任何字符”)
  • {3}
    =上述内容需要重复三次
  • (:[0-9]{2,4})
    一个冒号,后跟两到四个字符的数字序列。这是您的端口。
  • 端口是可选的,它要么在那里,要么不在那里

您的代码不起作用,因为除了在其他答案中指出的正则表达式的几个问题之外,您提供的网站通过在底层HTML代码中执行一些javascript来显示每个IP的端口号

为了捕获每个IP及其关联的端口号,您首先需要执行javascript,以便在HTML响应中正确打印端口号(您可以遵循此处的指导原则:),然后需要从javascript计算的HTML响应中提取此信息


通过检查HTML响应,我发现每个端口号的前面是
,后面是
r'\d{1,3}(?:\.\d{1,3}){3}:\d+'
对我有效。我替换了
[0-9]
用相应的类
\d
阻塞。但是请查看返回的文本:您搜索的字符串不是以该格式返回的。相反,他们在IP和端口之间添加了额外的html元素。感谢P.Shark。我在安装DrySrape模块时出错。我按照此文档在我的Ubuntu操作系统中进行安装-但未成功。PermissionError:[Errno 13]权限被拒绝:“/usr/local/lib/python3.5/dist packages/xvfbwrapper.py”请看我提供的链接中的第一个答案:您将找到指向Drysrap github页面的链接,该页面提供了如何在Ubuntu环境中正确安装它的说明。请确保以sudo的方式执行命令;)@shark-我尝试了这个站点的正则表达式,但是我无法通过。你能给正则表达式找到IP和端口吗。r'[0-9]+(?:\.[0-9]+){3}:[0-9]+[0-9]?'这有效。
re.findall( r'([0-9]{1,3}\.){3}[0-9]{1,3}(:[0-9]{2,4})?'
import dryscrape
import re

url = 'http://spys.one/free-proxy-list/FR/'



#get html with javascript
session = dryscrape.Session()
session.visit(url)
response = session.body()


#capture ip:
IP = re.findall(r'[0-9]+(?:\.[0-9]+){3}(?=<script)',response)

#capture port:
port = re.findall(r'(?<=:</font>)(.*?)(?=\<)',response)

#join IP with ports
IP_with_ports = []
for i in range(len(IP)):
    IP_with_ports.append(IP[i] + ":" + port[i])


print (IP_with_ports)