解决scrapy下载图片时相对路径转绝对路径的问题
2011-10-11 14:38
711 查看
这段时间一直在研究利用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 + "\n")
relative_url = site.select('./@src').extract()
log.write("relative_url:" + relative_url[0] + "\n")
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)
经过一段时间的各种恶心,现在终于搞定了相对路径转绝对路径的问题,下面就记录下个人心得:
其实结果很简单,但是如果不了解相关函数的用法,那就是各种恶心了。
其实关键就是两个函数: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 + "\n")
relative_url = site.select('./@src').extract()
log.write("relative_url:" + relative_url[0] + "\n")
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)
相关文章推荐
- 在JAVA WEB项目中,JSP中的图片无法显示,绝对路径和相对路径问题的解决办法。
- mvc 解决StyleBundle中 图片绝对路径 装换成相对路径的问题 CssRewriteUrlTransform
- [爬虫项目]scrapy使用ImagePipeline下载图片And图片分类存储(解决路径问题)
- JavaWeb 项目中的绝对路径和相对路径以及问题的解决方式
- asp.net用户控件中使用相对路径的解决方法--------图片路径问题(用户控件、图片路径),ResolveUrl
- 关于h5中图片不显示的问题之绝对路径和相对路径
- base标签和JSP声明变量解决文件相对路径和绝对路径问题
- Asp.Net中解决图片绝对路径问题
- asp.net2.0解决用户控件图片相对路径出错的问题,ResolveUrl的用法
- vue小笔记 解决build 相对路径报错问题和静态图片路径报错的问题
- <input type="file" 上传图片不是绝对路径 而是相对路径 怎么解决?
- android获取项目下的一张图片的绝对路径问题以及解决方法
- asp.net2.0解决用户控件图片相对路径出错的问题,ResolveUrl的用法
- asp.net 用户控件中 使用相对路径的解决方法-------- 图片路径问题(用户控件、图片路径) ,ResolveUrl
- jsp图片显示问题(绝对路径和相对路径)
- 解决在项目中相对路径导入 与 绝对路径导入问题
- android获取项目下的一张图片的绝对路径问题以及解决方法
- 牛腩新闻发布系统-图片路径问题(相对路径和绝对路径)
- vue cli使用绝对路径引用图片问题的解决
- 解决上传图片预览时获取绝对路径问题