专注自:http://blog.csdn.net/hjy_six/article/details/6862648
这段时间一直在研究利用scrapy抓取图片的问题,我发觉,用官网的http://doc.scrapy.org/en/0.12/topics/images.html的donwload item images的教程只能处理html中包含绝对路径的图片,对于JavaScript动态生成的图片和包含相对路径的图片都是无可奈何的。 经过一段时间的各种恶心,现在终于搞定了相对路径转绝对路径的问题,下面就记录下个人心得: 其实结果很简单,但是如果不了解相关函数的用法,那就是各种恶心了。 其实关键就是两个函数:base_url = get_base_url(response)和[urljoin_rfc(base_url, ru) for ru in relative_url] 直接贴代码似乎更方便更好理解: from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector from scrapy.utils.response import get_base_url from scrapy.utils.url import urljoin_rfc from dmoz.items import DmozItem class DmozSpider(BaseSpider): name = "dmoz.org" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.pizzahut.com.cn/phdi/index.aspx#!handler/home.ashx?&tagid=&proid=" ] def parse(self, response): hxs = HtmlXPathSelector(response) sites = hxs.select('//li/a[@target = "_blank"]/img') items = [] i = 0 for site in sites: base_url = get_base_url(response) log = open("log.txt", "a") log.write("base_url:" + base_url + " ") relative_url = site.select('./@src').extract() log.write("relative_url:" + relative_url[0] + " ") i = i + 1 item = DmozItem() item['image_urls'] = [urljoin_rfc(base_url, ru) for ru in relative_url] items.append(item) return items 要注意的一点就是:relative_url = site.select('./@src').extract()不能写成relative_url = site.select('./@src').extract()[0] //有些贴是这样写的 这样写会导致处理url时发生异常 raise ValueError('Missing scheme in request url: %s' % self._url)