所以我要做的是从HTTP请求列表中提取所有URL。应该在路径末尾删除它们的协议,参数和斜杠(如果存在)。例如:
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
我已尝试分两步完成此操作,而不使用任何复杂的正则表达式(只适用于任何网址)
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', file.read())
然后使用urlparse。
domain = '{url.netloc}{url.path}'.format(url=urlparse(url))
它几乎没用。但是我的路径以斜线结尾。
www.somewebsite.cc/somepath/
所以我决定使用正则表达式。但是,我只知道基础知识,所以我不能提出任何运作良好的东西。现在我有类似的东西,但它并没有覆盖" /"事情和不同的协议:/
感谢您的任何建议:)
((?:www\.+)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*))
答案 0 :(得分:0)
如果结束斜线是您唯一的问题,那就是解决方案。
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('/')for x in <你的正则表达式在这里> ]。