Я пытаюсь отказаться от сайта с помощью 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)
Проблема я столкнулся в том, что гусеничный идет на стартовую страницу, но не ломом ни одной страницы после этого. Также обратите внимание, что ссылки на последующие страницы не указаны на стартовой странице.
Какие изменения мне необходимо внести в мой код для этого?
Благодарим за быстрый ответ. Где я должен добавить этот фрагмент кода? –
Просто удалите все правила и добавьте перед def parse_tv, также вам понадобится импорт. Запрос: from scrapy.http import Request – Dmitry
также не нужно наследовать от CrawlSpider, поскольку вы больше не используете правила, просто наследуйте от BaseSpider (или Spider в последней версии scrapy trunk) –