zoukankan      html  css  js  c++  java
  • [转]解决scrapy下载图片时相对路径转绝对路径的问题

    专注自: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)
  • 相关阅读:
    俺自己可以写点代码了
    学姐,孙哥
    Linux/Unix 常用参数使用说明
    DB2 rollforward 命令使用详解
    DB2 create tablespace
    db2 基础语法
    VMWARE虚拟机不显示主机共享的文件夹解决办法
    DB2创建数据库常用参数详解
    从Linux访问Windows共享目录
    Data Flow >> Source >> Error Output >> Error & Truncation: Ignore Failure, Redirect Now, Fail Component
  • 原文地址:https://www.cnblogs.com/themost/p/7111727.html
Copyright © 2011-2022 走看看