Как перейти по ссылке с лоскутком - PullRequest
0 голосов
/ 01 декабря 2011

Как перейти по ссылкам в этом примере: http://snippets.scrapy.org/snippets/7/?Сценарий останавливается после посещения ссылки на первой странице.

class MySpider(BaseSpider):
"""Our ad-hoc spider"""
name = "myspider"
start_urls = ["http://stackoverflow.com/"]

question_list_xpath = '//div[@id="content"]//div[contains(@class, "question-summary")]'

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

    for qxs in hxs.select(self.question_list_xpath):
        loader = XPathItemLoader(QuestionItem(), selector=qxs)
        loader.add_xpath('title', './/h3/a/text()')
        loader.add_xpath('summary', './/h3/a/@title')
        loader.add_xpath('tags', './/a[@rel="tag"]/text()')
        loader.add_xpath('user', './/div[@class="started"]/a[2]/text()')
        loader.add_xpath('posted', './/div[@class="started"]/a[1]/span/@title')
        loader.add_xpath('votes', './/div[@class="votes"]/div[1]/text()')
        loader.add_xpath('answers', './/div[contains(@class, "answered")]/div[1]/text()')
        loader.add_xpath('views', './/div[@class="views"]/div[1]/text()')

        yield loader.load_item()

Я пытался изменить:

class MySpider(BaseSpider):

На

class MySpider(CrawlSpider)

И добавить

rules = (
    Rule(SgmlLinkExtractor(allow=()),
         callback='parse',follow=True),
)

Но он не сканирует весь сайт

Спасибо,

1 Ответ

0 голосов
/ 01 декабря 2011

Да, вам нужно создать подкласс CrawlSpider и переименовать функцию parse во что-то вроде parse_page, потому что CrawlSpider использует parse для начала очистки. На этот вопрос уже отвечали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...