Scrapy SgmlLinkExtractor вопрос - PullRequest
       24

Scrapy SgmlLinkExtractor вопрос

9 голосов
/ 27 ноября 2009

Я пытаюсь заставить работать 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 ]

10 голосов
/ 30 ноября 2009

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

3 голосов
/ 25 октября 2011

, если вы проверяете документацию, ясно пишется « Предупреждение »

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

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

1 голос
/ 23 декабря 2010

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

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)
1 голос
/ 27 ноября 2009

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

...