2

我正在用 Python 解析一个 url,您可以在下面找到一个示例 url 和代码,我想要做的是从 url 中拆分 (74743) 并创建一个 for 循环,该循环将从部件列表中获取它。尝试使用 urlparse 但无法完成它,主要是因为 url 中的更改部分。我只想要最简单和最快的方法来做到这一点。

示例网址:

http://example.com/wps/portal/lYuxDoIwGAYf6f9aqKSjMNQ/?PartNo=74743&IntNumberOf=&is=

( http://example.com/wps/portal ) 总是固定的

(lYuxDoIwGAYf6f9aqKSjMNQ) 一直在变化

(74743) 将取自列表名称 Parts

(IntNumberOf=&is=) 也会根据网站的部分而变化

这是代码:

from lxml import html
import requests
import urlparse


Parts = [74743, 85731, 93021]

url = 'http://example.com/wps/portal/lYuxDoIwGAYf6f9aqKSjMNQ/?PartNo=74743&IntNumberOf=&is='

parsing = urlparse.urlsplit(url)

print parsing
4

1 回答 1

2
>>> import urlparse

>>> url = 'http://example.com/wps/portal/lYuxDoIwGAYf6f9aqKSjMNQ/?PartNo=74743&IntNumberOf=&is='

>>> split_url = urlparse.urlsplit(url)
>>> split_url.path
'/wps/portal/lYuxDoIwGAYf6f9aqKSjMNQ/'

您可以使用“/”将路径拆分为字符串列表,对列表进行切片并重新加入:

>>> path = split_url.path
>>> path.split('/')
['', 'wps', 'portal', 'lYuxDoIwGAYf6f9aqKSjMNQ', '']

切掉最后两个:

>>> path.split('/')[:-2]
['', 'wps', 'portal']

并重新加入:

>>> '/'.join(path.split('/')[:-2])
'/wps/portal'

要解析查询,请使用 parse_qs:

>>> parsed_query = urlparse.parse_qs(split_url.query)
{'PartNo': ['74743']}

要保留空参数,请使用keep_blank_values=True

>>> query = urlparse.parse_qs(split_url.query, keep_blank_values=True)
>>> query
{'PartNo': ['74743'], 'is': [''], 'IntNumberOf': ['']}

然后您可以修改查询字典:

>>> query['PartNo'] = 85731

并更新原来的 split_url:

>>> updated = split_url._replace(path='/'.join(base_path.split('/')[:-2] +
                                              ['ASDFZXCVQWER', '']),
                                query=urllib.urlencode(query, doseq=True))

>>> urlparse.urlunsplit(updated)
'http://example.com/wps/portal/ASDFZXCVQWER/?PartNo=85731&IntNumberOf=&is='
于 2015-10-18T22:41:54.777 回答