Scrapy Crawler прекращается на случайных страницах - PullRequest
0 голосов
/ 28 апреля 2018

Я новичок в Scrapy. Я сканирую субреддит r / india, используя рекурсивный парсер для хранения заголовка, upvotes и URL-адресов каждой темы. Все работает нормально, но Scraper неожиданно заканчивается странной ошибкой, которая показывает:

2018-04-29 00:01:12 [scrapy.core.scraper] ERROR: Spider error processing 
<GET https://www.reddit.com/r/india/?count=50&after=t3_8fh5nv> (referer: 
https://www.reddit.com/r/india/?count=25&after=t3_8fiqd5)
Traceback (most recent call last):
File "Z:\Anaconda\lib\site-packages\scrapy\utils\defer.py", line 102, in 
iter_errback
yield next(it)
File "Z:\Anaconda\lib\site-packages\scrapy\spidermiddlewares\offsite.py", 
line 30, in process_spider_output
for x in result:
File "Z:\Anaconda\lib\site-packages\scrapy\spidermiddlewares\referer.py", 
line 339, in <genexpr>
    return (_set_referer(r) for r in result or ())
File "Z:\Anaconda\lib\site-packages\scrapy\spidermiddlewares\urllength.py", 
line 37, in <genexpr>
    return (r for r in result or () if _filter(r))
File "Z:\Anaconda\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 
58, in <genexpr>
    return (r for r in result or () if _filter(r))
File 
"C:\Users\jayes\myredditscraper\myredditscraper\spiders\scrapereddit.py", 
line 28, in parse
   yield Request(url=(next_page),callback=self.parse)
File "Z:\Anaconda\lib\site-packages\scrapy\http\request\__init__.py", line 
25, in __init__
   self._set_url(url)
File "Z:\Anaconda\lib\site-packages\scrapy\http\request\__init__.py", line 
62, in _set_url
    raise ValueError('Missing scheme in request url: %s' % self._url)
ValueError: Missing scheme in request url:
2018-04-29 00:01:12 [scrapy.core.engine] INFO: Closing spider (finished)

И ошибка появляется на случайных страницах каждый раз, когда запускается паук, поэтому я не могу определить причину проблемы. Вот мой файл redditscraper.py, который содержит код (я также использовал Pipeline и Items.py, но он не содержит проблем, которые я чувствую)

import scrapy
import time
from scrapy.http.request import Request
from myredditscraper.items import MyredditscraperItem
class ScraperedditSpider(scrapy.Spider):

name = 'scrapereddit'
allowed_domains = ['www.reddit.com']
start_urls = ['http://www.reddit.com/r/india/']
def parse(self,response):
    next_page=''
    titles=response.css("a.title::text").extract()
    links=response.css("a.title::attr(href)").extract()
    votes=response.css("div.score.unvoted::attr(title)").extract()
    for item in zip(titles,links,votes):

        new_item = MyredditscraperItem()
        new_item['title']=item[0]
        new_item['link']=item[1]
        new_item['vote']=item[2]
        yield new_item

        next_page = response.css("span.next- 
button").css('a::attr(href)').extract()[0]

    if next_page is not None:

        yield Request(url=(next_page),callback=self.parse)

1 Ответ

0 голосов
/ 28 апреля 2018

Как говорит ваше исключение

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

Это означает, что вы пытаетесь удалить недействительный URL - пропущено http:// или https:// в URL.

Полагаю, проблема не в start_urls, потому что в противном случае функция синтаксического анализа не будет вызываться. Проблема в функции разбора.

Когда вызывается yield Request, вам нужно проверить, содержит ли next_page схему. кажется, что анализируемые вами URL-адреса являются относительными ссылками, поэтому у вас есть два варианта, чтобы продолжить удалять эти ссылки, не сталкиваясь с этим исключением:

  1. Передача абсолютного URL.
  2. Пропуск относительных URL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...