问号在url中保留网址.qu

2024-10-05 17:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python解析xml数据,xml文件包含url,正如您所知url不能通过regex直接解析,因为它们的格式不适合,有一些字符会阻止解析,比如“?”, '$', '@'. 所以我用urllib.quote函数,它工作得很好,除了一个url,我无法解释这一点。在

在urllib.quoteurl如下所示:

https://randomurl.fr/?oslc_cm.properties=FORM_item

函数完成后,它变成这样:

^{pr2}$

所以“:”被更正了,但是“?”并且“=”保持原样,这会阻止解析。我觉得奇怪的是,它是唯一一个不起作用的网址,而其他30个网址也包含“?”它只是把它变成了“%3F”、“=”变成了“%3D”。我试图改变它在xml文件中的位置,但仍然是这个精确的url没有很好地引用。不过,我注意到,如果我用FORM\productCmt(另一个url的属性)更改FORM_item,那么它就可以引用它了。在我看来这很随机,我不知道发生了什么。在

有人看到故障了吗?在

编辑

我无法转义字符,因为我正在获取xml文件并对其进行解析。下面是我用来引用URL的代码:

def genElementList(self, xmldata):
        xmldata_encoded = xmldata
        p = re.compile(r'"(http.*?)"')
        urls = p.findall(xmldata)
        for url in urls:
            xmldata_encoded = str.replace(xmldata_encoded, url, urllib.quote(url))
            print xmldata_encoded + '\n'

对于每个url,我可以看到除了一个之外,这个函数起作用,总是一样的。我将它与其他正确引用的url进行了比较,它们完全相似,除了“properties=FORM_item”部分,其中另一部分是“properties=FORM_productCmt”。这就是为什么我不明白为什么它不能工作。在


Tags: 文件数据函数formurlxmlpropertiesurllib
1条回答
网友
1楼 · 发布于 2024-10-05 17:25:41

谢谢,用户2357112 您帮我了解了问题所在,我通过将substring函数的count参数设置为1来解决子字符串问题:

p = re.compile(r'"(http.*?)"')
        urls = p.findall(xmldata)
        for url in urls:
            xmldata_encoded = str.replace(xmldata_encoded, url, urllib.quote(url), 1)

相关问题 更多 >