spider是定義乙個特定站點(或一組站點)如何被抓取的類,包括如何執行抓取(即跟蹤鏈結)以及如何從頁面中提取結構化資料(即抓取項)。也就是說我們要抓取的**的鏈結配置、抓取邏輯、解析邏輯等其實都是在 spider 中定義的 。
spider 的整個爬取迴圈過程如下:
我們定義的 spider 是繼承自 scrapy.spiders.spider。scrapy.spiders.spider 這個類是最簡單最基本的 spider 類,其他 spider 必須繼承這個類。
scrapy.spiders.spider 這個類提供了 start_requests() 方法的預設實現,讀取並請求 start_urls 屬性 ,並根據返回的結果呼叫 parse() 方法解析結果 。
import scrapy
from myproject.items import myitem
class
myspider
(scrapy.spider)
: name =
'example.com'
allowed_domains =
['example.com'
]def
start_requests
(self)
:yield scrapy.request(
'', self.parse)
yield scrapy.request(
'', self.parse)
yield scrapy.request(
'', self.parse)
defparse
(self, response)
:for h3 in response.xpath(
'//h3'
).getall():
yield myitem(title=h3)
for href in response.xpath(
'//a/@href'
).getall():
yield scrapy.request(response.urljoin(href)
, self.parse)
Scrapy 普通的Spider(二)
這個spider是用於解析xml的,它可以通過指定的節點迭代的解析xml。迭代器可以選擇iternodes,xml或html。由於xml和html都需要一次性讀取整個dom然後才能解析xml,這樣會有效能的問題,所以推薦使用iternodes迭代器。但是當解析有錯誤標記的xml時,使用html迭代器...
讓Scrapy的Spider更通用
scrapy的架構初探 一文所講的spider是整個架構中最定製化的乙個部件,spider負責把網頁內容提取出來,而不同資料採集目標的內容結構不一樣,幾乎需要為每一類網頁都做定製。我們有個設想 是否能做乙個比較通用的spider,把定製部分再進一步隔離出去?gooseeker有乙個爬蟲群模式,從技術...
scrapy 監控spider啟動和關閉
from scrapy.xlib.pydispatch import dispatcher from scrapy import signals from scrapy.exceptions import dropitem class duplicatespipeline object def in...