3

Web サイトからアイテムの名前を取得するクローラーを作成しています。この Web サイトには、1 ページあたり 25 のアイテムと複数のページがあります (アイテムの種類によっては 200 です)。

コードは次のとおりです。

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from lonelyplanet.items import LonelyplanetItem

class LonelyplanetSpider(CrawlSpider):
    name = "lonelyplanetItemName_spider"
    allowed_domains = ["lonelyplanet.com"]
    def start_requests(self):
        for i in xrange(8):
            yield self.make_requests_from_url("http://www.lonelyplanet.com/europe/sights?page=%d" % i)

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    sites = hxs.select('//h2')
    items = []
    for site in sites:
        item = LonelyplanetItem()
        item['name'] = site.select('a[@class="targetUrl"]/text()').extract()
        items.append(item)
    return items

クローラーを実行してデータを csv 形式で保存すると、データが順番に保存されません。つまり、ページ 2 のデータはページ 1 の前に保存され、ページ 3 はページ 2 の前に保存されます。また、特定のページのすべてのデータが保存される前に、別のページのデータが入ってきて、前のページの残りのデータが再度保存されることがあります。

4

1 に答える 1