Scrapy SgmlLinkExtractor вопрос


Я пытаюсь сделать SgmlLinkExtractor на работу.

Это подпись:

SgmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths(), tags=('a', 'area'), attrs=('href'), canonicalize=True, unique=True, process_value=None)

Я просто использую allow=()

Итак, я ввожу

rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

Итак, начальный url-адрес 'http://www.whitecase.com/jacevedo/', и я ввожу allow=('/aadler',) и ожидаю, что '/aadler/' также будет сканироваться. Но вместо этого паук сканирует исходный url и затем закрывает:

[wcase] INFO: Domain opened
[wcase] DEBUG: Crawled </jacevedo/> (referer: <None>)
[wcase] INFO: Passed NuItem(school=[u'JD, ', u'Columbia Law School, Harlan Fiske Stone Scholar, Parker School Recognition of Achievement in International and Foreign Law, ', u'2005'])
[wcase] INFO: Closing domain (finished)

Что я здесь делаю не так?

Есть ли здесь кто-нибудь, кто успешно использовал Scrapy, кто может помочь мне закончить это паук?

Спасибо за помощь.

Я включаю код для паука ниже:

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 Nu.items import NuItem
from urls import u

class NuSpider(CrawlSpider):
    domain_name = "wcase"
    start_urls = ['xxxxxx/jacevedo/']

    rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

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

        item = NuItem()
        item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,s))(.*?)(d+)')
        return item

SPIDER = NuSpider()

Примечание: SO не позволит мне разместить более 1 url, поэтому замените исходный url по мере необходимости. Сожалеть об этом.

4 9

4 ответа:

Вы переопределяете метод" parse", который он появляется. "parse" - это частный метод в CrawlSpider, используемый для перехода по ссылкам.

Если вы проверяете документацию, то" предупреждение " ясно написано

"при написании правил crawl spider избегайте использования синтаксического анализа в качестве обратного вызова, так как он использует сам метод parse для реализации своей логики. Таким образом, если вы переопределите метод parse, паук обхода больше не будет работать."

Url для проверки

Allow=(r'/aadler/', ...

Вы пропускаете запятую после первого элемента, чтобы "правила" были кортежем..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)