web-dev-qa-db-ja.com

スクレイプスパイダーを入手してサイト全体をクロールする

私はscrapyを使用して、所有している古いサイトをクロールしています。以下のコードをスパイダーとして使用しています。 Webページごとにファイルを出力したり、その中にすべてのコンテンツを含むデータベースを出力したりしてもかまいません。しかし、現在実行しているすべてのURLを入力しなくても、スパイダーにすべてをクロールさせることができる必要があります。

import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["www.example.com"]
    start_urls = [
        "http://www.example.com/contactus"
    ]

    def parse(self, response):
        filename = response.url.split("/")[-2] + '.html'
        with open(filename, 'wb') as f:
            f.write(response.body)
10
Lewis Smith

サイト全体をクロールするには、scrapy.Spiderの代わりに CrawlSpider を使用する必要があります

ここに例があります

あなたの目的のためにこのようなものを使ってみてください:

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class MySpider(CrawlSpider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com']

    rules = (
        Rule(LinkExtractor(), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        filename = response.url.split("/")[-2] + '.html'
        with open(filename, 'wb') as f:
            f.write(response.body)

また、これを見てください 記事

10
Daniil Mashkin