2013-05-23 2 views
0

В настоящее время я пытаюсь работать с инфраструктурой Scrapy, чтобы просто собрать кучу URL-адресов, которые я могу сохранить и отсортировать позже. Тем не менее, я не могу заставить URL-адреса печатать или храниться в файле при обратном вызове, независимо от того, что я пробовал и адаптировал из других учебных пособий. Вот в настоящее время, что я иду с моим классом паука для этого конкретного примера, выбирая небольшой сайт:Как заставить Scrapy правильно выполнить обратный вызов?

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from crawler.items import CrawlerItem 
from scrapy import log 

class CrawlerSpider(CrawlSpider): 
    name = 'crawler' 

    allowed_domains = [ 
     "glauberkotaki.com" 
    ] 

    start_urls = [ 
     "http://www.glauberkotaki.com" 
    ] 

    rules = (
     Rule(SgmlLinkExtractor(allow=(), deny=('about.html'))), 
     Rule(SgmlLinkExtractor(allow=('about.html')), callback='parseLink', follow="yes"), 
    ) 

    def parseLink(self, response): 
     x = HtmlXPathSelector(response) 
     print(response.url) 
     print("\n") 

Он ползет все страницы этого сайта штрафа, но не печатать ничего на всех , даже когда он попадает на веб-страницу «www.glauberkotaki.com/about.html», с которой я пытался проверить код. Мне кажется, что существует проблема с вызовом обратного вызова.

ответ

1

Я не думаю, что ваше второе правило никогда не называют, из docs:

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

Поскольку первый соответствует about.html, второй обратный вызов не запускается.

Я считаю, что добавление обратного вызова к первому правилу будет работать

Rule(SgmlLinkExtractor(allow=(), deny=('about.html'), callback='parseLink')),

или если вы просто хотите, чтобы проверить обратный вызов против о странице удалить первое правило

+1

Спасибо за ответ. К сожалению, хотя, просто опустив первое правило, это не работает. Теперь он просматривает только основную страницу и страницу about.html, но обратный вызов все еще не выдаётся, потому что я не вижу ничего напечатанного. – coltonoscopy

Смежные вопросы