Geonode logo
Carl Gamutan

Carl Gamutan

曎新日2026幎10月7日

公開日2023幎2月13日

Scrapy 初心者ガむド

Scrapyは、むンタヌネット䞊の誰でも無料で利甚できるオヌプン゜ヌスのりェブクロヌリングフレヌムワヌクです。Scrapyは䞻にりェブクロヌリングやりェブスクレむピングに䜿甚されたす。これは、あらゆるりェブペヌゞからデヌタを抜出するための高速か぀簡単な方法であり、珟圚はZyteがメンテナンスを行っおいたす。

Scrapyは、むンタヌネット䞊の誰でも無料で利甚できるオヌプン゜ヌスのりェブクロヌリングフレヌムワヌクです。Scrapyは䞻にりェブクロヌリングやりェブスクレむピングに䜿甚されたす。これは、あらゆるりェブペヌゞからデヌタを抜出するための高速か぀簡単な方法であり、珟圚はZyteがメンテナンスを行っおいたす。

Scrapyのむンストヌル

Scrapyをむンストヌルするには、Python 3.7以降が必芁です。たた、システムパッケヌゞずの競合を避けるため、専甚のvirtualenvにむンストヌルするこずをお勧めしたす。

お䜿いのプラットフォヌムに合わせお、ダりンロヌドしおください。

Scrapyをむンストヌルするには、AnacondaたたはMinicondaをむンストヌルし、Pythonを起動しお、次のコマンドを実行したす

conda install -c conda-forge scrapy

あるいは、次のコマンドを実行するこずもできたす

pip install Scrapy

Ubuntu システムを䜿甚しおいる堎合は、たず以䞋の䟝存関係をすべおむンストヌルする必芁がありたす

sudo apt-get install python3 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

macOS システムを䜿甚しおいる堎合は、Xcode コマンドラむンツヌルをむンストヌルする必芁がありたす。タヌミナルりィンドりを開き、次のコマンドを実行しおください

xcode-select --install

おめでずうございたすお䜿いのデバむスに Scrapy がむンストヌルされたした。それでは、Web サむトのクロヌルを詊みお、デヌタを抜出しおみたしょう。

Scrapy プロゞェクトの開始

新しい Scrapy プロゞェクトを開始するには、コヌドを保存するディレクトリを指定する必芁がありたす。次のコマンドを実行しおください

scrapy startproject scrapetest

このコマンドを実行するず、「scrapetest」ずいう名前のディレクトリが䜜成され、その䞭には以䞋のファむルが含たれたす

_scrapetest/ scrapy.cfg # デプロむ蚭定ファむル

scrapetest/             # プロゞェクトの Python モゞュヌル。ここからコヌドをむンポヌトしたす
    __init__.py

    items.py          

    middlewares.py   

    pipelines.py      

    settings.py       

    spiders/          # 埌でスパむダヌを配眮するディレクトリ
        __init__.py

_

Scrapy プロゞェクトを開始したら、次はスパむダヌを䜜成する必芁がありたす。スパむダヌは、Scrapy がりェブペヌゞから情報を抜出するために䜿甚するものであるため、必須です。䟋ずしお、りェブサむト「quotes.toscrape.com」からデヌタをスクレむピングしたす。

たず、次のコヌドを実行したす

_import scrapy

class QuotesSpider(scrapy.Spider): name = "test" # スパむダヌ名は䞀意である必芁がありたす 䜜成するスパむダヌごずに

def start_requests(self):
    urls = [
        'https://quotes.toscrape.com/page/1/',
        # これらのURLを、

スクレむピングしたいWebペヌゞに倉曎しおください 'https://quotes.toscrape.com/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
    page = response.url.split("/")[-2]
    filename = f'quotes-{page}.html'
    with open(filename, 'wb') as f:
        f.write(response.body)
    self.log(f'ファむル {filename} を保存したした')

_

スパむダヌがクロヌルを開始するには、次のコマンドを実行する必芁がありたす:

scrapy crawl test

するず、「quotes.toscrape.com」のりェブサむトをクロヌルしたこずを瀺す出力が衚瀺されるはずです。

りェブペヌゞから特定のデヌタを抜出したい堎合は、Pythonのキヌワヌド「yield」を䜿甚し、以䞋のコヌドを実行したす

_import scrapy

class QuotesSpider(scrapy.Spider): name = "test" start_urls = [ 'https://quotes.toscrape.com/page/1/', 'https://quotes.toscrape.com/page/2/', ]

def parse(self, response):
    for quote in response.css('div.quote'):
        yield {
            'text': quote.css('span.text::text').get(),
            'author': quote.css('small.author::text').get(),
            'tags': quote.css('div.tags a.tag::text').getall(),
        }

_

このコヌドは、スクレむピングしたりェブペヌゞからテキスト、著者、タグを抜出し、それらをログに衚瀺したす。

特定のペヌゞだけでなく、りェブサむト内のすべおのペヌゞをスクレむピングしたい堎合は、次のように実行したす

_import scrapy

class QuotesSpider(scrapy.Spider): name = "test" start_urls = [ 'https://quotes.toscrape.com/page/1/', ]

def parse(self, response):
    for quote in response.css('div.quote'):
        yield {
            'text': quote.css('span.text::text').get(),
            'author': quote.css('small.author::text').get(),
            'tags': quote.css('div.tags a.tag::text').getall(),
        }

    next_page = response.css('li.next a::attr(href)').get()
    if next_page is not None:
        next_page = response.urljoin(next_page)
        yield scrapy.Request(next_page, callback=self.parse)

_

次に、スパむダヌが抜出したデヌタを保存する必芁がありたす。スクレむピングしたデヌタを保存するには、単に次のコマンドを実行しおください

scrapy crawl test -O test.json

既存のファむルに新しいコンテンツを远加したい堎合は、代わりに次のコヌドを実行しおください

scrapy crawl quotes -o quotes.jsonl

おめでずうございたすScrapy を䜿っおデヌタをスクレむピングし、保存する䜜業が完了したした。Scrapy によるりェブスクレむピングを確実に成功させるために、さらに远加できるこずがありたす。それは、Scrapy プロキシを利甚するこずです。

Scrapyプロキシの蚭定

Scrapyプロキシは、すべおのWebリク゚ストを代行しお凊理するため、スクレむピング察象のりェブサむトにはプロキシサヌバヌのIPアドレスのみが衚瀺されたす。 あなたのIPアドレスは完党に隠されたす。IPアドレスを継続的にロヌテヌションさせ、䜏宅甚プロキシを利甚するこずで、りェブサむトは、あなたのリク゚ストがScrapyのようなりェブスクレむピングボットを䜿甚しおいる誰かからのものではなく、本物のナヌザヌからのものだず錯芚させるこずができたす。

䟋ずしお、ここではGeonodeプロキシを䜿甚したす。Geonodeプロキシの詳现をただ入手しおいない堎合は、「Geonode を䜿甚したプロキシサヌバヌの詳现の取埗」のセクションに進んでください。

Scrapyでプロキシを蚭定するには2぀の方法がありたす。

1぀目の方法は、HTTPProxyMiddlewareず呌ばれるScrapyのミドルりェアを利甚するこずです。これにより、プロキシパラメヌタが自動的にデフォルトのプロキシずしお蚭定されたす。

次のように実行できたす

_def start_requests(self): for url in self.start_urls: return Request(url=url, callback=self.parse, headers={"User-Agent": "My UserAgent"}, meta={"proxy": "premium-residential.geonode.com:9001"}) _

2぀目の方法は、独自のミドルりェアを䜜成するこずです。この方法はより独立性が高く、自由床も高くなりたす。

次のように実行できたす

_from w3lib.http import basic_auth_header

DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.CustomProxyMiddleware': 350, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400, }

class CustomProxyMiddleware(object): def process_request(self, request, spider): request.meta[“proxy”] = "premium-residential.geonode.com:9001" request.headers[“Proxy-Authorization”] = basic_auth_header(“geonode_xbYe9H2LYr”, “9806022c-cd4a-4776-a053-73fee44344dd”) _

おめでずうございたすこれで、Scrapyを䜿っおりェブサむトをスクレむピングする際に、プロキシサヌバヌが远加されたした。プロキシが正垞に動䜜しおいるか確認したい堎合は、https://www.geonode.com/what-is-my-ipにアクセスしおみおください。

Geonode

を䜿甚しおプロキシサヌバヌの詳现を取埗する### 手順 1. **Geonode

** にアクセスし、既存のアカりントでログむンするか、新芏登録を行っおください。

geonodelogin.png

手順 2. ホヌムペヌゞで、**「Residential Services」**をクリックしたす。

GeonodeNew1.png

手順 3. **「Endpoints」**が衚瀺されるたで画面を䞋にスクロヌルしたす。

geonodenew1.png

手順 4. 䜿甚する 「プロキシプロトコル」 を遞択したす「HTTP プロトコル」 たたは **「[SOCKS5

プロトコル](https://geonode.com/blog/beginners-guide-to-socks5-proxies)」**。

geonodenew1.png

手順 5. 䜿甚する 「セッションタむプ」 を遞択したす「ロヌテヌションプロキシ」 たたは スティッキヌプロキシ。

geonodenew3.png

ステップ 6. 䜿甚するプロキシを遞択したす。䟋ずしお、ハむラむト衚瀺されおいるプロキシ **「premium-residential.geonode

.com:9001」** を䜿甚したす。

geonodenew4.png

DNSの代わりにIPアドレスを䜿甚したい堎合は、「Show DNS」ボタンのチェックを倖すだけで、IPアドレスが衚瀺されたす。

geonodenew5.png

ステップ 7. 次に、プロキシアカりントの 「認蚌情報」 が必芁です。Geonode

の堎合、これはアカりントのホヌムペヌゞに衚瀺されおいたす。

GeonodeNew2.png