правила скрапа не называют методом разбора - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок в scrapy и пытаюсь сканировать домен, следуя всем внутренним ссылкам и добавляя заголовок URL с шаблоном /example/.*

сканирование, но удаление заголовка делаетнет, поскольку выходной файл пуст.Скорее всего, я неправильно понял правила.Это правильный синтаксис, использующий правила для достижения того, что я ищу?

import scrapy
class BidItem(scrapy.Item):
    url = scrapy.Field()
    title = scrapy.Field()

spider.py

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

from bid.items import BidItem

class GetbidSpider(CrawlSpider):
    name = 'getbid'
    allowed_domains = ['domain.de']
    start_urls = ['https://www.domain.de/']

    rules = (
        Rule(
            LinkExtractor(), 
            follow=True
        ),
        Rule(
            LinkExtractor(allow=['example/.*']), 
            callback='parse_item'
        ),
    )

    def parse_item(self, response):
         href = BidItem()
         href['url']    = response.url
         href['title']  = response.css("h1::text").extract()
         return href

crawl: scrapy crawl getbid -o 012916.csv

1 Ответ

0 голосов
/ 22 ноября 2018

Из CrawlSpider документов :

Если несколько правил соответствуют одной и той же ссылке, будет использовано первое, в соответствии с порядком, определенным в этоматрибут.

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

Устранить проблему так же просто, как переключить порядокправила.

...