Esquema ausente no URL da solicitação
Estou com esse bug há um tempo, a seguinte mensagem de erro é a seguinte:
File "C:\Python27\lib\site-packages\scrapy-0.20.2-py2.7.egg\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
Código Scrapy:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.http import Request
from spyder.items import SypderItem
import sys
import MySQLdb
import hashlib
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
# _*_ coding: utf-8 _*_
class some_Spyder(CrawlSpider):
name = "spyder"
def __init__(self, *a, **kw):
# catch the spider stopping
# dispatcher.connect(self.spider_closed, signals.spider_closed)
# dispatcher.connect(self.on_engine_stopped, signals.engine_stopped)
self.allowed_domains = "domainname.com"
self.start_urls = "http://www.domainname.com/"
self.xpaths = '''//td[@class="CatBg" and @width="25%"
and @valign="top" and @align="center"]
/table[@cellspacing="0"]//tr/td/a/@href'''
self.rules = (
Rule(SgmlLinkExtractor(restrict_xpaths=(self.xpaths))),
Rule(SgmlLinkExtractor(allow=('cart.php?')), callback='parse_items'),
)
super(spyder, self).__init__(*a, **kw)
def parse_items(self, response):
sel = Selector(response)
items = []
listings = sel.xpath('//*[@id="tabContent"]/table/tr')
item = IgeItem()
item["header"] = sel.xpath('//td[@valign="center"]/h1/text()')
items.append(item)
return items
Tenho certeza de que tem algo a ver com o URL que estou pedindo para que o scrapy siga no LinkExtractor. Ao extraí-los com casca, eles se parecem com isso:
data=u'cart.php?target=category&category_id=826'
Em comparação com outro URL extraído de uma aranha de trabalho:
data=u'/path/someotherpath/category.php?query=someval'
Já dei uma olhada em algumas perguntas sobre SO, comoDownload de fotos com scrapy mas ao ler, acho que posso ter um problema um pouco diferente.
Eu também dei uma olhada nisso -http://static.scrapy.org/coverage-report/scrapy_http_request___init__.html
o que explica que o erro é exibido se self.urls estiver com falta de um ":", observando o start_urls que eu defini. Não consigo entender por que esse erro seria exibido, pois o esquema está claramente definido.
Obrigado pela leitura,
Toby