W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
scrapy.spiders.
XMLFeedSpider
XMLFeedSpider是為解析XML提要而設計的,它通過使用特定的節(jié)點名對這些提要進行迭代。迭代器可以從以下選項中選擇: iternodes
, xml
和 html
. 建議使用 iternodes
由于性能原因,迭代器 xml
和 html
迭代器一次生成整個DOM以便解析它。然而,使用 html
因為迭代器在分析帶有錯誤標記的XML時可能很有用。
要設置迭代器和標記名,必須定義以下類屬性:
iterator
定義要使用的迭代器的字符串。它可以是:
'iternodes'
-基于正則表達式的快速迭代器
'html'
-使用的迭代器 ?Selector
? . 請記住,這使用了DOM解析,必須將所有的DOM加載到內存中,這對于大型提要來說可能是一個問題。
'xml'
-使用的迭代器 ?Selector
? . 請記住,這使用了DOM解析,必須將所有的DOM加載到內存中,這對于大型提要來說可能是一個問題。
默認為: 'iternodes'
.
namespaces
列表 (prefix, uri)
定義該文檔中可用的命名空間的元組,這些命名空間將使用此蜘蛛進行處理。這個 prefix
和 uri
將用于使用 ?register_namespace()
? 方法。
然后,可以在 ?itertag
? 屬性。
例子:
class YourSpider(XMLFeedSpider):
namespaces = [('n', 'http://www.sitemaps.org/schemas/sitemap/0.9')]
itertag = 'n:url'
# ...
除了這些新屬性之外,這個蜘蛛還具有以下可重寫的方法:
adapt_response
(response)一種方法,當響應從蜘蛛中間件到達時,在蜘蛛開始解析它之前,立即接收響應。它可以用于在解析響應體之前對其進行修改。此方法接收響應并返回響應(可以是相同的或另一個響應)。
parse_node
(response, selector)對與提供的標記名匹配的節(jié)點調用此方法 (itertag
)接收響應和 ?Selector
? 對于每個節(jié)點。重寫此方法是必需的。否則,你的蜘蛛就不能工作了。此方法必須返回 item object ,A
?Request
?
對象,或包含任何對象的iterable。
警告
由于其內部實現(xiàn),在編寫時必須顯式設置新請求的回調 XMLFeedSpider -基于蜘蛛;否則會發(fā)生意外行為。
這些蜘蛛很容易使用,讓我們來看一個例子:
from scrapy.spiders import XMLFeedSpider
from myproject.items import TestItem
class MySpider(XMLFeedSpider):
name = 'example.com'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com/feed.xml']
iterator = 'iternodes' # This is actually unnecessary, since it's the default value
itertag = 'item'
def parse_node(self, response, node):
self.logger.info('Hi, this is a <%s> node!: %s', self.itertag, ''.join(node.getall()))
item = TestItem()
item['id'] = node.xpath('@id').get()
item['name'] = node.xpath('name').get()
item['description'] = node.xpath('description').get()
return item
基本上,我們所做的就是創(chuàng)建一個蜘蛛,從給定的 ?start_urls
? ,然后遍歷 ?item
? 標簽,打印出來,并將一些隨機數(shù)據(jù)存儲在 ?Item
? .
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: