用scrapy抓取网页的时候,有时抓取到的并不是完整的url,而是url的后面部分。例如,完整的url是http://michaelyou.github.io/categories/scrapy/
,我们抓到的只是/categories/scrapy/
,这个时候如何获取完整的url呢?或者说,如何将完整的url拼出来呢?
解决方法如下:
首先在我们的spider文件头上加上:
from scrapy.utils.response import get_base_url from scrapy.utils.url import urljoin_rfc
第二步在我们定义的parse函数中加上:
#这一句便是取url的开头部分 base_url = get_base_url(response) #省略若干行 #这一句是取url的后面部分 relative_url = sel.xpath('***').extract()[0] #将两部分合并 item['link'] = urljoin_rfc(base_url, relative_url)
严重提醒:
在求relative_url
时,我们在extract()
后面加了[0]
,因为extract()
取出来的是一个数组,而函数urljoin_rfc
需要的参数是字符串,所以要从数组中将值取出来,这时的数组内只有一个值,index=0
,所以加上了[0]
.很多人忘记了加[0]
,最后导致合并的时候失败。