scrapy如何获取完整的url

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