使用scrapy递归地爬网站点

时间:2014-02-04 11:33:52

标签: python web-scraping scrapy

我正在尝试使用scrapy废弃网站。我需要抓取的网页网址如下所示:     http://www.example.com/bla-bla-bla/ 2

下一页我需要抓取的是:     http://www.example.com/bla-bla-bla/ 3

我需要抓取的下一页是:     http://www.example.com/bla-bla-bla/ 4

等等等......

这是我到目前为止基于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)

我面临的问题是抓取工具进入起始页面但在此之后不会废弃任何页面。另请注意,后续页面的链接不包含在起始页面中。

我需要对代码进行哪些更改才能完成此任务?

1 个答案:

答案 0 :(得分:3)

Scrapy规则无法正常运行。使用类似的东西:

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

其中1000 - 总页数。