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

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

File "C:Python27libsite-packagesscrapy-0.20.2-py2.7.eggscrapyhttprequest__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:

    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, которые я определил, я не могу понять, почему эта ошибка будет отображаться, поскольку схема явно определенный.

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

Тоби

5 ответов


изменить start_urls в:

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

добавить url с "http" или "https"


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

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

изменить restrict_xpaths to

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/",)

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