Schéma manquant dans l'URL de demande
Je suis coincé sur ce bug pendant un certain temps, le message d'erreur suivant se présente comme suit:
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
Scrapy code:
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
Je suis sûr que c'est quelque chose à voir avec l'url je me demande scrapy à suivre dans le LinkExtractor. Lors de l'extraction de leur coquille, ils cherchent quelque chose comme ceci:
data=u'cart.php?target=category&category_id=826'
Par rapport à une autre url, extraite d'un travail d'araignée:
data=u'/path/someotherpath/category.php?query=someval'
J'ai eu un coup d'oeil à quelques questions, telles que Téléchargement de photos avec scrapy mais de le lire, je crois que j'ai un problème un peu différent.
J'ai aussi pris un coup d'oeil à ce -
http://static.scrapy.org/coverage-report/scrapy_http_request___init__.html
ce qui explique que l'erreur est levée si l'auto.url manque un ":", en regardant les start_urls j'ai défini je n'arrive pas à voir pourquoi cette erreur serait de montrer puisque le système est clairement défini.
Merci pour la lecture,
Toby
source d'informationauteur Toby
Vous devez vous connecter pour publier un commentaire.
changement
start_urls
:préfixe de l'url par "http" ou "https"
@Guy répondu plus tôt,
start_urls
attribut doit être une liste, laexceptions.ValueError: Missing scheme in request url: h
message vient du fait que: "h" dans le message d'erreur est le premier caractère de "http://www.bankofwow.com/", interprété comme une liste (de caractères)allowed_domains
doit aussi être une liste de domaines, autrement vous aurez filtré "hors site".Changement
restrict_xpaths
àil doit représenter une zone du document où trouver des liens, il ne devrait pas être un lien Url directement
De http://doc.scrapy.org/en/latest/topics/link-extractors.html#sgmllinkextractor
Enfin, il est d'usage de définir ces attributs de classe au lieu de ces paramètres dans
__init__
:Projet a une syntaxe comme
C'est plus clair dans la description sur la même page de définition:
Dans la question de
Missing schemes
il semble qu'il y a[//[user:password@]host[:port]]
partie manquante danscomme mentionné ci-dessus.
J'ai eu un problème similaire où ce concept simple suffirait la solution pour moi!
Espère que cela aide certains.
changement
start_urls
:il devrait fonctionner.