2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Scrapy】抜き出したURLを修正・加工する

Last updated at Posted at 2020-03-14

#想定例
ScrapyのCrawlSpiderを使用して、
アイテム一覧ページ->個々のアイテムの概要ページ->個々のアイテムの詳細ページ、とリンクを辿っていけるサイトをクローリングし、
詳細ページの情報をスクレイピングして保存する場合を想定。

ページとURLの対応関係は下のような感じで。

ページ URL
アイテム一覧 example.com/list
アイテムの概要 example.com/item/(ID)/
アイテムの詳細 example.com/item/(ID)/details

こういった構造のサイトの場合、一覧ページから抜き出した、概要ページへのリンクの末尾に、/detailsをつけ加えて、それを使って直接詳細ページにリクエストすることができれば、相手先のサイトへのリクエスト数が半減し、こちらのプログラムの実行にかかる時間も減らせて一石二鳥!
というわけで下記が実装例。

#実装
LinkExtractorの引数process_valueに、URLを加工する処理をラムダ式で記述する。

example.py
class ExampleSpider(CrawlSpider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/list'] #アイテムの一覧ページ

    rules = [
            Rule(LinkExtractor(
                #/item/を含むURLを抜き出す
                allow=r'.*/item/.*',
                #抜き出したURLに'details/'を付け加える
                process_value= lambda x:x + 'details/' 
                ),callback='parse_details'),
    ]
#

    def parse_details(self, response):
        #(省略)

以上!

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?