2014-02-04 2 views
2

Я пытаюсь отказаться от сайта с помощью scrapy. Адрес веб-страницы мне нужно ползти выглядит следующим образом: http://www.example.com/bla-bla-bla/Сканирование сайта рекурсивно с помощью scrapy

Следующая страница мне нужно ползти это: http://www.example.com/bla-bla-bla/

и на следующей странице мне нужно ползти это: http://www.example.com/bla-bla-bla/

так далее и так далее ....

Это код, который я написал до сих пор основаны на Scrapy учебнике:

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import Selector 
from schooldata.items import SchooldataItem 

class tv_spider(CrawlSpider): 
name = "tv" 
allowed_domain = ["http://www.example.com"] 
start_urls = [ 
    "http://www.example.com/bla-bla-bla/2" 
] 
#rules = [Rule(SgmlLinkExtractor(allow=['/\d+']), 'parse_tv')] 
#rules = [Rule(SgmlLinkExtractor(allow=['/\d+']), callback='parse_tv')] 
rules = (
    Rule(SgmlLinkExtractor(allow=r"bla-bla-bla/\d+"), follow=True, callback='parse_tv'), 
) 

def parse_tv(self, response): 
    filename = response.url.split("/")[-2] 
    open(filename, 'wb').write(response.body) 

Проблема я столкнулся в том, что гусеничный идет на стартовую страницу, но не ломом ни одной страницы после этого. Также обратите внимание, что ссылки на последующие страницы не указаны на стартовой странице.

Какие изменения мне необходимо внести в мой код для этого?

ответ

3

Правила проведения скрининга работают неправильно. Используйте примерно следующее:

def start_requests(self): 
    for i in range(1000): 
     yield Request("http://www.example.com/bla-bla-bla/" + str(i), self.parse_tv) 

где 1000 - общее количество страниц.

+0

Благодарим за быстрый ответ. Где я должен добавить этот фрагмент кода? –

+0

Просто удалите все правила и добавьте перед def parse_tv, также вам понадобится импорт. Запрос: from scrapy.http import Request – Dmitry

+1

также не нужно наследовать от CrawlSpider, поскольку вы больше не используете правила, просто наследуйте от BaseSpider (или Spider в последней версии scrapy trunk) –

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