Scrapy не прекращается после завершения сканирования - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь сделать следующее с помощью scrapy.

    1. Сканирование всех изображений JPG текущей страницы
  • Сканирование изображений в формате JPG с других страниц в формате <a>


Вот код:

from spiderStudy.items import Images
import scrapy

class MySpider(scrapy.Spider):
    name = "example"
    allowed_domains = ["example.com"]
    start_urls = [
    "http://www.example.com/"
    ]

    def parse(self, response):
    for sel in response.css('a'):
        c = sel.xpath('@href').extract_first()
        if (c is not None) and ('void' not in c) and (c not in self.start_urls):
        # parse image
        imgs = response.css('img')
        for img in imgs:
            d = img.xpath("@src").extract_first()
            if d and d.endswith('.jpg'):
            d = response.urljoin(d)
            yield {'image_urls': [d]}
        # more urls
        url = response.urljoin(c)
        yield scrapy.Request(url, callback=self.parse)


import scrapy
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem


class SpiderstudyPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
    for image_url in item['image_urls']:
        yield scrapy.Request(image_url)

    def item_completed(self, results, item, info):
    image_paths = [x['path'] for ok, x in results if ok]
    if not image_paths:
        raise DropItem("Item contains no images")
    item['image_paths'] = image_paths
    return item


Сканер сканировал все изображения JPG на всех страницах, но затем он застрял, и программа не остановилась должным образом.
Я не знаю, что заставляет программу зависать, может быть, потому что я использовал несколько 'yield?
Пожалуйста, помогите мне.

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