处理列表(URL)中的值-Python

时间:2019-02-16 18:07:55

标签: python scrapy

我想重新格式化列表中的值。我正试图从网站上抓取网址。 Scrapy返回相对URL,然后将其存储在列表中。我想将绝对URL与相对URL进行连接,并进行一些匹配并替换列表自身内的相对URL,然后将其用于下一步。

这是当前列表的样子:

regions = ['/listings/in/spain%2Fandalucia', '/listings/in/spain%2Faragon', '/listings/in/spain%2Fasturias', '/listings/in/spain%2Fbalearic-islands']

这就是理想的外观。

regions_final = ['https://worldmap.com/listings/in/spain/andalucia', 'http://worldmap.comlistings/in/spain/Faragon', 'http://worldmap.comlistings/in/spain/fasturias', 'http://worldmap.com/listings/in/spain/balearic-islands']

我需要简单地查找并用“ /”替换“%2F”,并在当前值之前附加“ https://worldmap.com”。 如果有人有任何提示,我将非常感谢您的帮助!

谢谢

2 个答案:

答案 0 :(得分:4)

以下是创建URL的更可靠的方法:

from urllib.parse import unquote

region_urls = [response.urljoin(unquote(x)) for x in regions]

urljoin负责根据当前响应的基本URL加上相对URL创建正确的绝对URL。

unquote会照顾%..符号,以防您也得到其他符号。

答案 1 :(得分:1)

使用列表推导并添加字符串:

regions = ['/listings/in/spain%2Fandalucia', '/listings/in/spain%2Faragon', '/listings/in/spain%2Fasturias', '/listings/in/spain%2Fbalearic-islands']

region_urls = ['https://www.worldmap.com' + x.replace('%2F', '/') for x in regions]
#['https://www.worldmap.com/listings/in/spain/andalucia',
# 'https://www.worldmap.com/listings/in/spain/aragon',
# 'https://www.worldmap.com/listings/in/spain/asturias',
# 'https://www.worldmap.com/listings/in/spain/balearic-islands']