我想重新格式化列表中的值。我正试图从网站上抓取网址。 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”。 如果有人有任何提示,我将非常感谢您的帮助!
谢谢
答案 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']