例:
http://example.com/?a=text&q2=text2&q3=text3&q2=text4
Run Code Online (Sandbox Code Playgroud)
删除" q2 "后,它将返回:
http://example.com/?q=text&q3=text3
Run Code Online (Sandbox Code Playgroud)
在这种情况下,有多个" q2 ",所有都被删除.
是否有标准功能来检查IRI,检查URL显然我可以使用:
parts = urlparse.urlsplit(url)
if not parts.scheme or not parts.netloc:
'''apparently not an url'''
Run Code Online (Sandbox Code Playgroud)
我使用包含Unicode字符的URL尝试了上述内容:
import urlparse
url = "http://fdasdf.fdsfî??îs.fss/?î?î"
parts = urlparse.urlsplit(url)
if not parts.scheme or not parts.netloc:
print "not an url"
else:
print "yes an url"
Run Code Online (Sandbox Code Playgroud)
而我得到的是yes an url.这是否意味着我对这个有效IRI的测试很好?还有另外一种方法吗?
我的应用程序创建自定义URI(或URL?)来标识对象并解决它们.问题是Python的urlparse模块拒绝解析未知的URL方案,就像解析http一样.
如果我不调整urlparse的uses_*列表,我得到这个:
>>> urlparse.urlparse("qqqq://base/id#hint")
('qqqq', '', '//base/id#hint', '', '', '')
>>> urlparse.urlparse("http://base/id#hint")
('http', 'base', '/id', '', '', 'hint')
Run Code Online (Sandbox Code Playgroud)
这就是我的工作,我想知道是否有更好的方法:
import urlparse
SCHEME = "qqqq"
# One would hope that there was a better way to do this
urlparse.uses_netloc.append(SCHEME)
urlparse.uses_fragment.append(SCHEME)
Run Code Online (Sandbox Code Playgroud)
为什么没有更好的方法来做到这一点?
是否有内置函数来获取这样的url:../images.html给定一个像这样的基本URL:http://www.example.com/faq/index.html和一个目标URL,如http://www.example.com/images.html
我检查了urlparse模块.我想要的是urljoin()函数的对应物.
我对python很新.我正在尝试解析URL文件,只留下域名.
我的日志文件中的一些网址以http://开头,有些网址以www.Some开头.
这是我的代码中删除http://部分的部分.我需要添加什么来查找http和www.并删除两个?
line = re.findall(r'(https?://\S+)', line)
Run Code Online (Sandbox Code Playgroud)
目前,当我运行代码时,只有http://被剥离.如果我将代码更改为以下内容:
line = re.findall(r'(https?://www.\S+)', line)
Run Code Online (Sandbox Code Playgroud)
只有以两者开头的域都会受到影响.我需要代码更有条件.TIA
编辑...这是我的完整代码......
import re
import sys
from urlparse import urlparse
f = open(sys.argv[1], "r")
for line in f.readlines():
line = re.findall(r'(https?://\S+)', line)
if line:
parsed=urlparse(line[0])
print parsed.hostname
f.close()
Run Code Online (Sandbox Code Playgroud)
我把原帖误认为正则表达式.它确实使用urlparse.
我在python-modules,Django,Zope或Python中的任何地方寻找类似java.net.URL的东西.我希望它最好是出于语义原因,因为有关程序的分析结果意味着URL在其中起着至关重要的作用.结果是这样的URL类在该程序中也将具有很大的实际用途.
当然我可以自己写这样的课程,但在开始重新发明轮子之前我想环顾四周.
我确实看过urllib2和urlparse.它urlparse基本上具有我需要的功能,但它没有将它封装到类中java.net.URL.关于我对我的程序的分析,它是颠倒的.
我看着也进入源代码urlparse的类SplitResult和ParseResult.它们具有一些基本功能,可用于子类化.但是我必须将其余的urlparse函数重写为子类方法.
我还发现了mxURL - Python的灵活URL数据类型.它非常接近我真正想要的.只是它似乎对我的目的来说太过分了.
有人可以建议另一种选择吗 我应该继续重新发明轮子吗?
我的解决方案
为了获得我的URL类,我基本上做了两件事:
urlparse.ResultMixin.urlparse.urlparse()结果并将结果转换为URL实例参数的函数.我想在给定的url字符串前添加'http'方案名称,如果它缺少的话.否则,留下网址,所以我认为urlparse是正确的方法.但是每当没有方案并且我使用get url时,我在方案和域之间得到///而不是'//'.
>>> t = urlparse.urlparse('www.example.com', 'http')
>>> t.geturl()
'http:///www.example.com' # three ///
Run Code Online (Sandbox Code Playgroud)
如何转换此网址,使其实际看起来像:
'http://www.example.com' # two //
Run Code Online (Sandbox Code Playgroud) 有没有更简洁的方法来修改Python 2中URL的某些部分?
例如
http://foo/bar -> http://foo/yah
Run Code Online (Sandbox Code Playgroud)
目前,我这样做:
import urlparse
url = 'http://foo/bar'
# Modify path component of URL from 'bar' to 'yah'
# Use nasty convert-to-list hack due to urlparse.ParseResult being immutable
parts = list(urlparse.urlparse(url))
parts[2] = 'yah'
url = urlparse.urlunparse(parts)
Run Code Online (Sandbox Code Playgroud)
有更清洁的解决方案吗?
在打开URL读取数据之前,我想检查URL是否有效.
我用的功能,urlparse从urlparse包:
if not bool(urlparse.urlparse(url).netloc):
# do something like: open and read using urllin2
Run Code Online (Sandbox Code Playgroud)
但是,我注意到一些有效的URL被视为已损坏,例如:
url = upload.wikimedia.org/math/8/8/d/88d27d47cea8c88adf93b1881eda318d.png
Run Code Online (Sandbox Code Playgroud)
此URL有效(我可以使用我的浏览器打开它).
有没有更好的方法来检查URL是否有效?
url = "http://www.example.com?type=a&type1=b&type2=c"
urllist = get_urllist(url)
trigger = ["'or '1'='1'"," 'OR '1'='2'","'OR a=a"]
def get_urllist(url):
url_parsed = urlparse.urlparse(url)
#extract the query parameters of the URL
query = urlparse.parse_qs(url_parsed.query)
#get the list of query
query_list = query_list(query)
#Get Base url
url = urlparse._replace(query=None).geturl()
#modify url to get url_list
for query in query_list :
# change the original query to get the expected result
return url_list
def query_list(query):
for t in trigger:
for key, value in query.items():
query[key] += t
query_list.append(query)
return …Run Code Online (Sandbox Code Playgroud) python ×10
urlparse ×10
url ×5
url-parsing ×2
cgi ×1
http ×1
python-2.6 ×1
python-2.7 ×1
python-2.x ×1
urllib2 ×1