Scrapy spider crawl бесконечный - PullRequest
       159

Scrapy spider crawl бесконечный

0 голосов
/ 04 августа 2020

Задача Мой паук должен иметь возможность сканировать каждую ссылку всего домена и должен распознавать, если это ссылка на продукт или, например, ссылка на категорию, но записывает только ссылки продукта на элементы.

Я установил правило, которое разрешает URL-адреса, содержащие "a-", потому что он содержится в каждой ссылке на продукт.

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

После этого она должна сохранить ссылку в моем списке

Проблема Паук собирает все ссылки вместо их анализа, если содержится «-a»

Отредактировано: используется код

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from ..items import LinkextractorItem

class TopArtSpider(CrawlSpider):
    name = "topart"
    allow_domains = ['topart-online.com']
    start_urls = [
        'https://www.topart-online.com'
    ]
    custom_settings = {'FEED_EXPORT_FIELDS' : ['Link'] }

    rules = (
        Rule(LinkExtractor(allow='/a-'), callback='parse_filter_item', follow=True),
    )

    def parse_filter_item(self, response):
        exists = response.xpath('.//div[@class="producteant"]').get()
        link = response.xpath('//a/@href')
        if exists:
            response.follow(url=link.get(), callback=self.parse)

        for a in link:   
            items = LinkextractorItem()
            items['Link'] = a.get()
            yield items

1 Ответ

0 голосов
/ 04 августа 2020
# -*- coding: utf-8 -*-
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class TopartSpider(CrawlSpider):
    name = 'topart'
    allowed_domains = ['topart-online.com']
    start_urls = ['http://topart-online.com/']

    rules = (
        Rule(LinkExtractor(allow=r'/a-'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        return {'Link': response.url}
...