Ошибка Scrapy (Неподдерживаемый JavaScript-схема URL) - PullRequest
0 голосов
/ 10 ноября 2019

Я новичок в Scrapy. В настоящее время использую Scraping 1.8. Я могу собрать данные и вывести их в файл json с помощью следующей команды.

scrapy crawl jokes -o data.json

К сожалению, произошла следующая ошибка. Как я могу исправить все эти ошибки?

import scrapy

class JokesSpider(scrapy.Spider):
    name = 'jokes'

    start_urls = [
        'http://www.laughfactory.com/jokes/family-jokes'
    ]

    def parse(self, response):
        for joke in response.xpath("//div[@class='jokes']"):
            yield {
                'joke_text': joke.xpath(".//div[@class='joke-text']/p").get()
            }

        next_page = response.xpath("//li[@class='next']/a/@href").get()
        if next_page is not None:
            next_page_link = response.urljoin(next_page)
            yield scrapy.Request(url=next_page_link, callback=self.parse)

Ошибка 1: (можно исправить, повернув ROBOTSTXT_OBEY в false, но я не думаю, что это правильный путь)

ERROR: Error downloading <GET javascript:/robots.txt>: Unsupported URL scheme 'javascript': no handler available for that scheme

Ошибка 2:

ERROR: Error downloading <GET javascript:void(0)>
Traceback (most recent call last):
  File "c:\users\user\desktop\project\scrapycourse\virtual_env\lib\site-packages\twisted\internet\defer.py", line 1416, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "c:\users\user\desktop\project\scrapycourse\virtual_env\lib\site-packages\twisted\python\failure.py", line 512, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "c:\users\user\desktop\project\scrapycourse\virtual_env\lib\site-packages\scrapy\core\downloader\middleware.py", line 44, in process_request
    defer.returnValue((yield download_func(request=request, spider=spider)))
  File "c:\users\user\desktop\project\scrapycourse\virtual_env\lib\site-packages\scrapy\utils\defer.py", line 45, in mustbe_deferred
    result = f(*args, **kw)
  File "c:\users\user\desktop\project\scrapycourse\virtual_env\lib\site-packages\scrapy\core\downloader\handlers\__init__.py", line 70, in download_request
    (scheme, self._notconfigured[scheme]))
scrapy.exceptions.NotSupported: Unsupported URL scheme 'javascript': no handler available for that scheme

1 Ответ

0 голосов
/ 10 ноября 2019

Самая последняя страница результатов (в настоящее время # 13) содержит этот HTML-код:

<li class="next"><a href="javascript:void(0)">NEXT</a></li>

, как вы можете видеть, есть class="next" и a с href. Я рекомендую немного переписать ваше выражение XPath (проверьте, есть ли http часть):

next_page = response.xpath("//li[@class='next']/a[contains(@href, 'http')]/@href").get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...