关于scrapy的一个问题

hjy_six 2011-10-10 08:57:59
我用scrapy网络爬虫抓回来了图片的相对路径,请问一下要怎样才能把它扩展为绝对路径啊??
...全文
1058 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjy_six 2011-10-11
  • 打赏
  • 举报
回复
这个是我的spider的代码:

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 = []
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()[0]
log.write("relative_url:" + relative_url + "\n")
item = DmozItem()
item['image_urls'] = urljoin_rfc(base_url, relative_url)
items.append(item)
return items

查看log.txt中的base_url:http://www.pizzahut.com.cn/phdi/index.aspx
relative_url:images/components/extralink-map.jpg

一下是错误信息:
--- <exception caught here> ---
File "C:\Python26\Lib\site-packages\twisted\internet\defer.py", line 542, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "C:\Python26\Lib\site-packages\scrapy\contrib\pipeline\media.py", line 41, in process_item
requests = arg_to_iter(self.get_media_requests(item, info))
File "C:\Python26\Lib\site-packages\scrapy\contrib\pipeline\images.py", line 308, in get_media_requests
return [Request(x) for x in item.get('image_urls', [])]
File "C:\Python26\Lib\site-packages\scrapy\http\request\__init__.py", line 25, in __init__
self._set_url(url)
File "C:\Python26\Lib\site-packages\scrapy\http\request\__init__.py", line 61, in _set_url
raise ValueError('Missing scheme in request url: %s' % self._url)
exceptions.ValueError: Missing scheme in request url: h

谢谢
iambic 2011-10-11
  • 打赏
  • 举报
回复
把base_url和relative_url的内容打出来看下。
另外贴错误贴完整错误。后半截的: %s根本没贴出来。
hjy_six 2011-10-11
  • 打赏
  • 举报
回复
非常非常感谢你提供的网址,我按照它的方法成功获得了图片的绝对路径,但是又有另外一个问题出现了,我调用urljoin_rfc(base_url, relative_url)函数时,显示异常为:Missing scheme in request url,然后我翻查了源代码:
if ':' not in self._url:
raise ValueError('Missing scheme in request url: %s' % self._url)

但是不知道怎样解决啊~再次求教~
iambic 2011-10-11
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/6499603/python-scrapy-convert-relative-paths-to-absolute-paths
hjy_six 2011-10-11
  • 打赏
  • 举报
回复
刚才我又重新测试了代码,发觉应该是:
relative_url = site.select('./@src').extract()[0]这一句出了问题,
然后我用
relative_url = site.select('./@src').extract()

[urljoin_rfc(base_url, ru) for ru in relative_url]结合使用就解决了这个问题;

非常非常非常感谢你的提示与帮助。感谢!
iambic 2011-10-11
  • 打赏
  • 举报
回复
异常栈里根本没有urljoin_rfc的信息。究竟是哪一行代码出错了?

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧