我有亲戚网址列表,我需要完整的网址。 我正在使用scrapy。
我可以使用
获取一个网址urljoin(response.url,url_list[0])
但是我想将这个功能应用到整个列表中,我试过这个:
map(urljoin,response.url,url_list)
但它不起作用
答案 0 :(得分:2)
它不起作用,因为map
需要一个函数和一个或几个序列,因此该函数应用于这些序列的相应元素。因此,在您的示例中,response.url
被解释为序列。我认为,最简单和最易读的方法是完全避免map
:
[urljoin(response.url, url) for url in url_list]
答案 1 :(得分:2)
我使用列表理解 - 更具可读性,实际上更快:
[urljoin(response.url, url) for url in url_list]
但如果您仍想使用map()
进行此操作,则需要使用functools.partial()
:
from functools import partial
map(partial(urljoin, response.url), url_list)
演示:
>>> from urlparse import urljoin
>>> from functools import partial
>>>
>>> >>> url_list = ["1", "2", "3"]
>>> map(partial(urljoin, "https://google.com"), url_list)
['https://google.com/1', 'https://google.com/2', 'https://google.com/3']