用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],最后导致合并的时候失败。