Отсутствует схема в запросе URL

Я некоторое время застрял в этой ошибке, следующее сообщение об ошибке выглядит следующим образом:

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 

Код процедуры:

  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 

Я почти уверен, что это как-то связано с URL-адресом. Я прошу пройти курс лечения в LinkExtractor. При извлечении их в оболочке они выглядят примерно так:

 data=u'cart.php?target=category&category_id=826' 

По сравнению с другим url, извлеченным из рабочего паука:

 data=u'/path/someotherpath/category.php?query=someval' 

Я посмотрел на несколько вопросов о SO, таких как Загрузка изображений с помощью scrapy, но, читая его, я думаю, что у меня может быть немного другая проблема.

Я также посмотрел на это – http://static.scrapy.org/coverage-report/scrapy_http_request___init__.html

в котором объясняется, что ошибка возникает, если self.urls отсутствует «:», от просмотра начальных_уровней, которые я определил, я не могу понять, почему эта ошибка будет отображаться, поскольку схема четко определена.

Спасибо за прочтение,

Тоби

    измените start_urls на:

     self.start_urls = ["http://www.bankofwow.com/"] 

    preend url с 'http' или 'https'

    Поскольку @Guy ответил ранее, атрибут start_urls должен быть списком, exceptions.ValueError: Missing scheme in request url: h start_urls exceptions.ValueError: Missing scheme in request url: h сообщение приходит из этого: « h » в сообщении об ошибке является первым символом « http: // www. bankofwow.com/ ", интерпретируется как список (символов)

    allowed_domains также должен быть списком доменов, иначе вы получите отфильтрованные запросы «offsite».

    Измените restrict_xpaths на

     self.xpaths = """//td[@class="CatBg" and @width="25%" and @valign="top" and @align="center"] /table[@cellspacing="0"]//tr/td""" 

    он должен представлять собой область в документе, где можно найти ссылки, она не должна напрямую ссылаться на URL-адреса

    Из http://doc.scrapy.org/en/latest/topics/link-extractors.html#sgmllinkextractor

    restrict_xpaths (str или list) – это XPath (или список XPath), который определяет регионы внутри ответа, где должны быть извлечены ссылки. Если задано, только текст, выбранный этими XPath, будет проверяться на наличие ссылок.

    Наконец, обычно это можно определить как атрибуты класса, а не параметры, указанные в __init__ :

     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 bow.items import BowItem import sys import MySQLdb import hashlib from scrapy import signals from scrapy.xlib.pydispatch import dispatcher # _*_ coding: utf-8 _*_ class bankOfWow_spider(CrawlSpider): name = "bankofwow" allowed_domains = ["bankofwow.com"] start_urls = ["http://www.bankofwow.com/"] xpaths = '''//td[@class="CatBg" and @width="25%" and @valign="top" and @align="center"] /table[@cellspacing="0"]//tr/td''' rules = ( Rule(SgmlLinkExtractor(restrict_xpaths=(xpaths,))), Rule(SgmlLinkExtractor(allow=('cart.php?')), callback='parse_items'), ) 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) super(bankOfWow_spider, 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 

    В принципе схема имеет синтаксис типа

     scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] 

    Примеры популярных схем включают http(s) , ftp , mailto , file , data и irc . Могут также существовать такие термины, как about или about:blank которыми мы знакомы.

    Это более ясно в описании на той же странице определения:

      hierarchical part ┌───────────────────┴─────────────────────┐ authority path ┌───────────────┴───────────────┐┌───┴────┐ abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1 └┬┘ └───────┬───────┘ └────┬────┘ └┬┘ └─────────┬─────────┘ └──┬──┘ scheme user information host port query fragment urn:example:mammal:monotreme:echidna └┬┘ └──────────────┬───────────────┘ scheme path 

    В вопросе о Missing schemes появляется [//[user:password@]host[:port]] часть, отсутствующая в

     data=u'cart.php?target=category&category_id=826' 

    как уже упоминалось выше.

    У меня была аналогичная проблема, когда эта простая концепция была бы достаточной для меня!

    Надеюсь, это поможет некоторым.

    измените start_urls на:

     self.start_urls = ("http://www.domainname.com/",) 

    он должен работать.