解析 python 中的 url 并更改其中的部分
parsing a url in python with changing part in it
我正在解析 Python 中的 url,您可以在下面找到示例 url 和代码,我想做的是将 (74743) 从url 并制作一个 for 循环,它将从零件清单中取出。
尝试使用 urlparse 但无法完成它,主要是因为 url 中的部分发生了变化。我只想要最简单快捷的方法。
示例 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
>>> 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='
我正在解析 Python 中的 url,您可以在下面找到示例 url 和代码,我想做的是将 (74743) 从url 并制作一个 for 循环,它将从零件清单中取出。 尝试使用 urlparse 但无法完成它,主要是因为 url 中的部分发生了变化。我只想要最简单快捷的方法。
示例 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
>>> 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='