因此,我要做的是从HTTP请求列表中提取所有urls。应该去掉协议、参数和路径末尾的斜杠(如果存在的话),例如:
10.4.180.222 [5/Feb/2018:08:03:40 +0100] "GET http://somewebsite.com/ HTTP/1.1" 200 1080
10.4.180.222 [5/Feb/2018:08:03:11 +0100] "GET http://www.somewebsite.cc/somesubdomain/ HTTP/1.1" 200 3056
10.4.180.222 [5/Feb/2018:08:03:11 +0100] "GET https://www.somewebsite.ua HTTP/1.1" 200 3056应:
somewebsite.com
www.somewebsite.cc/somepath
www.somewebsite.ua我尝试用两个步骤来完成这个任务,而不使用任何复杂的正则表达式(对于任何url都是通用的)
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', file.read())然后使用url解译。
domain = '{url.netloc}{url.path}'.format(url=urlparse(url))几乎没问题。然而,我得到的路径以斜杠结尾。
www.somewebsite.cc/somepath/所以我决定用regex。然而,我只知道一些基本的东西,所以我不能想出任何好的功能。现在我有这样的东西,但它不包括"/“和不同的协议:/
(谢谢你的建议:)
((?:www\.+)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*))发布于 2018-02-05 08:25:13
如果最后的斜杠是你唯一的问题,这就是解决办法。
urls = [ x.rstrip('/') for x in re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', file.read()) ]换句话说,就这么做
urls = x.rstrip('/')表示中的x< regex在这里>。
https://stackoverflow.com/questions/48618063
复制相似问题