如何使用urljoin地图?

时间:2016-01-24 20:04:52

标签: python dictionary web-scraping scrapy

我有亲戚网址列表,我需要完整的网址。 我正在使用scrapy。

我可以使用

获取一个网址
urljoin(response.url,url_list[0])

但是我想将这个功能应用到整个列表中,我试过这个:

map(urljoin,response.url,url_list)

但它不起作用

2 个答案:

答案 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']