10

Scrapy を使用してサイトを反復処理するにはどうすればよいですか? に一致するすべてのサイトの本文を抽出したいと思いますhttp://www.saylor.org/site/syllabus.php?cid=NUMBER。ここで、NUMBER は 1 から 400 程度です。

私はこのスパイダーを書きました:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from syllabi.items import SyllabiItem

class SyllabiSpider(CrawlSpider):

    name = 'saylor'
    allowed_domains = ['saylor.org']
    start_urls = ['http://www.saylor.org/site/syllabus.php?cid=']
    rules = [Rule(SgmlLinkExtractor(allow=['\d+']), 'parse_syllabi')]

    def parse_syllabi(self, response):
        x = HtmlXPathSelector(response)

        syllabi = SyllabiItem()
        syllabi['url'] = response.url
        syllabi['body'] = x.select("/html/body/text()").extract()
        return syllabi

しかし、うまくいきません。そのstart_urlでリンクを探していることは理解していますが、これは私がやりたいことではありません。私はサイトを繰り返したいと思っています。わかる?

助けてくれてありがとう。

4

1 に答える 1

13

これを試して:

from scrapy.spider import BaseSpider
from scrapy.http import Request
from syllabi.items import SyllabiItem

class SyllabiSpider(BaseSpider):
    name = 'saylor'
    allowed_domains = ['saylor.org']
    max_cid = 400

    def start_requests(self):
        for i in range(self.max_cid):
            yield Request('http://www.saylor.org/site/syllabus.php?cid=%d' % i,
                    callback=self.parse_syllabi)

    def parse_syllabi(self, response):
        syllabi = SyllabiItem()
        syllabi['url'] = response.url
        syllabi['body'] = response.body

        return syllabi
于 2012-12-28T21:53:04.813 に答える