Scrapy SgmlLinkExtractor игнорирует разрешенные ссылки

StackOverflow https://stackoverflow.com/questions/1811132

  •  06-07-2019
  •  | 
  •  

Вопрос

Ознакомьтесь с этим примером паука в документации по Scrapy. Объяснение таково:

  

Этот паук начал бы сканировать домашнюю страницу example.com, собирать ссылки на категории и ссылки на элементы, анализируя последние с помощью метода parse_item. Для каждого ответа элемента некоторые данные будут извлечены из HTML с использованием XPath, и элемент будет заполнен им.

Я точно скопировал тот же паук и заменил " example.com " с другим начальным URL.

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from stb.items import StbItem

class StbSpider(CrawlSpider):
    domain_name = "stb"
    start_urls = ['http://www.stblaw.com/bios/MAlpuche.htm']

    rules = (Rule(SgmlLinkExtractor(allow=(r'/bios/.\w+\.htm', )), callback='parse', follow=True), )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        item = StbItem()
        item['JD'] = hxs.select('//td[@class="bodycopysmall"]').re('\d\d\d\d\sJ.D.')
        return item

SPIDER = StbSpider()

Но мой паук "stb" не собирает ссылки с " / bios / " как и положено. Он запускает исходный URL, очищает item ['JD'] , записывает его в файл и затем завершает работу.

Почему SgmlLinkExtractor игнорируется? Rule читается, потому что он улавливает синтаксические ошибки внутри строки Rule .

Это ошибка? что-то не так в моем коде? Здесь нет ошибок, кроме множества необработанных ошибок, которые я вижу при каждом запуске.

Было бы неплохо узнать, что я здесь делаю неправильно. Спасибо за любые подсказки. Я неправильно понимаю, что SgmlLinkExtractor должен делать?

Это было полезно?

Решение

Функция parse фактически реализована и используется в классе CrawlSpider, и вы непреднамеренно переопределяете ее. Если вы измените имя на другое, например parse_item , тогда правило должно работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top