0

我正在尝试编写一个小脚本,它将 url 作为输入并解析它。

以下是我的脚本

#! /usr/bin/env python

import sys

from urlparse import urlsplit
url = sys.argv[1]
parseUrl = urlsplit(url)
print 'scheme  :', parseUrl.scheme
print 'netloc  :', parseUrl.netloc

但是当我执行这个脚本时./myscript http://www.example.com

它显示以下错误。

AttributeError: 'tuple' object has no attribute 'scheme'

我是新手python/scripting,我在哪里做错了?

编辑:我使用的 Python 版本是Python 2.7.5

4

2 回答 2

0

你不想要计划。相反,在这种情况下,您希望访问0元组的1索引和元组的索引。

print 'scheme  :', parseUrl[0]
print 'netloc  :', parseUrl[1]

urlparse使用.schemeand.netloc表示法,urlsplit而不是使用元组(请参阅适当的索引号):

这类似于 urlparse(),但不会从 URL 中拆分参数。如果需要更新的 URL 语法,允许将参数应用于 URL 的路径部分的每个段(请参阅 RFC 2396),则通常应使用此方法而不是 urlparse()。需要一个单独的函数来分隔路径段和参数。此函数返回一个 5 元组:(寻址方案、网络位置、路径、查询、片段标识符)。

返回值实际上是元组子类的一个实例。此类具有以下附加的只读便利属性:

Attribute Index   Value                               Value if not present
scheme      0       URL scheme specifier                empty string
netloc      1       Network location part               empty string
path        2       Hierarchical path                   empty string
query       3       Query component                     empty string
fragment    4       Fragment identifier                 empty string
username            User name                           None
password            Password                            None
hostname            Host name (lower case)              None
port                Port number as integer, if present  None
于 2015-01-26T06:29:14.033 回答
0

查看文档,听起来您使用的是 Python 2.4,它没有添加属性。另一个回答错过了文档中的关键部分:

2.2 版中的新功能。

在 2.5 版更改: 添加属性以返回值。

您必须通过索引或解包来访问元组部分:

scheme, netloc, path, query, fragment = urlsplit(url)

但是,您确实应该升级到 Python 2.7。不再支持 Python 2.4。

于 2015-01-26T07:15:31.983 回答