scapy再帰登り


前にScrapyが最も簡単な爬虫類をどのように実現するかを紹介したが、このDemoでは1つのページをキャプチャしただけだ.実際の応用では、爬虫類の重要な機能の一つは「新しいページを発見する」ことであり、再帰的に爬虫類を操作させることである.
新しいページを見つける方法は簡単です.まず、「Scrapy入門チュートリアル」のstart_のような爬虫類の入り口URLアドレスを定義します.urls,爬虫類はまずこのページの内容をキャプチャした後,その内容を解析し,すべてのリンクアドレスを抽出する.この抽出の過程は簡単で、html解析ライブラリを通じて、このようなノードの内容を抽出して、hrefパラメータの値は新しいページのURLです.このURL値を取得した後、タスクキューに追加し、爬虫類はキューからURLを取り続けます.これにより、爬虫類の入り口のURLを定義するだけで、爬虫類は指定されたサイトのほとんどのページに自動的に這い出すことができます.
もちろん、具体的な実装では、抽出されたURLをさらに処理する必要があります.
1.URLがサイトを指すドメイン名を判断し、外部サイトを指す場合は破棄することができる.URLを削除すると、すべての登ったURLをデータベースに保存し、新しく抽出したURLがデータベースに存在するかどうかを調べることができます.存在すれば、もちろん登る必要はありません.
次に、Scrapyで上記のような機能を果たす方法を紹介します.
spiderのpyファイルを書き換えるだけでいいです.parse()メソッドコードを変更するには、次のようにします.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from scrapy.selector import HtmlXPathSelector
 
def parse(self, response):
	hxs = HtmlXPathSelector(response)
	items = []
 
	newurls = hxs.select('//a/@href').extract()
	validurls = []
        for url in newurls:
                #  URL    
                if true: 
                        validurls.append(url)
 
        items.extend([self.make_requests_from_url(url).replace(callback=self.parse) for url in validurls])
 
        sites = hxs.select('//ul/li')
        items = []
        for site in sites:
                item = DmozItem()
                item['title'] = site.select('a/text()').extract()
                item['link'] = site.select('a/@href').extract()
                item['desc'] = site.select('text()').extract()
                items.append(item)
 
        return items

オリジナルの文章、転載は明記してください:CodeLogicから転載します[http://www.icodelogic.com]この文書のリンク先:http://www.icodelogic.com/?p=459
tags:Python、Scrapy、爬虫類