1

私は現在、Scrapeyを使用してPythonで単純なクローラーを作成しようとしています。私がしたいのは、リンクのリストを読んで、それらがリンクしているWebサイトのhtmlを保存することです。現在、すべてのURLを取得できますが、ページのダウンロード方法がわかりません。これまでの私のスパイダーのコードは次のとおりです。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from tutorial.items import BookItem

# Book scrappy spider

class DmozSpider(BaseSpider):
    name = "book"
    allowed_domains = ["learnpythonthehardway.org"]
    start_urls = [
        "http://www.learnpythonthehardway.org/book/",
    ]

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

        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//ul/li')
        items = []
        for site in sites:
            item = BookItem()
            item['title'] = site.select('a/text()').extract()
            item['link'] = site.select('a/@href').extract()
            items.append(item)
        return items
4

1 に答える 1

1

parseメソッドで、返さRequestれたアイテムのリスト内のオブジェクトを返し、ダウンロードをトリガーします。

for site in sites:
    ...
    items.append(item)
    items.append(Request(item['link']), callback=self.parse)

これにより、クローラーはBookItemリンクごとにを生成しますが、各本のページを繰り返しダウンロードします。もちろん、self.parsebookサブページを別の方法で解析する場合は、別のコールバック(たとえば)を指定できます。

于 2012-08-28T06:22:34.550 に答える