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 ответа:
Вы переопределяете метод" parse", который он появляется. "parse" - это частный метод в CrawlSpider, используемый для перехода по ссылкам.
Если вы проверяете документацию, то" предупреждение " ясно написано
"при написании правил crawl spider избегайте использования синтаксического анализа в качестве обратного вызова, так как он использует сам метод parse для реализации своей логики. Таким образом, если вы переопределите метод parse, паук обхода больше не будет работать."