追跡リンク-後続のリンクを取得

2074 ワード

では、単なる登りではなく、Webサイト全体の語録を取得したいと考えています.http://quotes.toscrape.comあ、2つのページをあげました.
Webページからデータを抽出する方法を理解し、最初のリンクから後続のリンクを追跡する方法を理解します.
まず、Webページから追跡したいリンクを抽出します.私たちのページをチェックしてテストすると、次のページのリンクがHTMLでマークされています.
    

shellから抽出してみましょう.
    >>>response.css('li.next a').extract_first()
    'Next →'

ラベル要素を抽出しましたが、属性のhref値がほしいです.このため、ScarpyはCSSの拡張アプリケーションを提供し、属性の内容を抽出します.
    >>>response.css('li.next a::attr(href)').extract_first()
    '/page/2/'

次に、爬虫類を変更して次のページに戻す機能を変更し、Webページからデータを抽出します.
    import scrapy


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

        def parse(self, response):
            for quote in response.css('div.quote'):
                yield{
                    'text':quote.css('span.text::text').extract_first(),
                    'author':quote.css('span.text:text').extract_first(),
                    'tags':quote.css('div.tags a.tag::text').extract(),
                }
            next_page = response.css('li.next a::attr(href)').extract_first()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback = self.parse)

データを抽出すると、parse()メソッドは次のページのリンクを検索し、urljoin()メソッドでウェブサイトの完全なURLを確立し、次のページに新しい要求を生成し、次のページのリンク抽出データに対してそれ自体を戻り関数として登録し、ウェブサイト全体を這い出すことを維持します.
Scrapyがリンクを追跡するメカニズムを示しています.戻り関数で要求を生成すると、要求が終了するまで、Scrapyは要求を送信し、戻り関数を登録するように手配します.
この方法では、複雑な爬虫類を構築して必要な深さを追跡し、アクセスしたページからデータを抽出することができます.
私たちの例では、すべてのWebページのリンクを追跡するループを作成します.タグページ数のあるブログ、フォーラム、その他のWebサイトに登りましょう.