初識爬蟲

url-scheduler-downloader-spider-pipeline
spider----需要進一步抓取的鏈接,例如之前分析的“下一頁”的鏈接,這些東西會被傳回 Scheduler(循環上述步驟)
      ----需要保存的數據,它們則被送到 Item Pipeline 那裏,那是對數據進行後期處理(詳細分析、過濾、存儲等)的地   方。另外,在數據流動的通道里還可以安裝各種中間件,進行必要的處理。
Spider部分
Spider是用戶編寫用於從單個網站(或者一些網站)爬取數據的類。

其包含了一個用於下載的初始URL,如何跟進網頁中的鏈接以及如何分析頁面中的內容, 提取生成item 的方法。
爲了創建一個Spider,您必須繼承 scrapy.Spider 類, 且定義一些屬性:

name: 用於區別Spider。 該名字必須是唯一的,您不可以爲不同的Spider設定相同的名字。
start_urls: 包含了Spider在啓動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 後續的URL則從初始的URL獲取到的數據中提取。
parse() 是spider的一個方法。 被調用時,每個初始URL完成下載後生成的 Response 對象將會作爲唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的 Request 對象。
提取Item

Selectors選擇器簡介:Scrapy使用了一種基於 XPath 和 CSS 表達式機制: Scrapy Selectors
Selector有四個基本的方法:

xpath(): 傳入xpath表達式,返回該表達式所對應的所有節點的selector list列表 。
css(): 傳入CSS表達式,返回該表達式所對應的所有節點的selector list列表.
extract(): 序列化該節點爲unicode字符串並返回list。
re(): 根據傳入的正則表達式對數據進行提取,返回unicode字符串list列表。
簡單例子:
/html/head/title: 選擇HTML文檔中 <head> 標籤內的 <title> 元素
/html/head/title/text(): 選擇上面提到的 <title> 元素的文字
//td: 選擇所有的 <td> 元素
//div[@class="mine"]: 選擇所有具有 class="mine" 屬性的 div 元素
Selector選擇器
response 擁有一個 selector 屬性, 該屬性是以該特定 response 初始化的類Selector 的對象。 您可以通過使用 response.selector.xpath() 或 response.selector.css() 來對response 進行查詢。
在scrapy快捷方式:response.xpath() 或 response.css()
response.xpath('//title')
response.xpath('//title').extract()
response.xpath('//title/text()')
response.xpath('//title/text()').extract()
response.xpath('//title/text()').re('(\w+):')
提取數據
response.xpath('//ul/li')
網站的描述:

response.xpath('//ul/li/text()').extract()
網站的標題:

response.xpath('//ul/li/a/text()').extract()
以及網站的鏈接:

response.xpath('//ul/li/a/@href').extract()
每個 .xpath() 調用返回selector組成的list,因此我們可以拼接更多的 .xpath() 來進一步獲取某個節點。

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷,XPath 是 W3C XSLT 標準的主要元素,並且 XQuery 和 XPointer 都構建於 XPath 表達之上。



pipeline部分
pipeline功能:-----通過spider爬取到所需的數據存放在item後,item可以發送到item pipeline 進行進一步的處理(通過幾個組件-Python class),如是否需要pipeline進行進一步處理,或者丟棄,或者不再處理它。


item pipeline 使用場景
清除HTML數據
驗證爬取的數據(檢查是否包含某一字段)
檢查是否有重複數據(duplicate),然後去重
把爬取的數據(scraped item)存入數據庫(database)中


item pipeline 組件是一些python類,必需實現以下幾個方法:

process_item(self, item, spider) #對item中的數據進行處理,返回data字典,item對象,或者拋出其他異常,丟棄重複數據等


open_spider(self, spider)  #當spider開始工作時,可以調用,如打開文件,打開數據庫等等。。。,否則報錯


close_spider(self, spider) #當關閉spider時調用,如關閉文件,關閉數據庫等等。。。


from_crawler(cls, crawler)  # 如果存在的話,從crawler創建一個pipeline實例。它必須返回一個新的pipeline實例。Crawler對象提供scrapy所有組件的接口,像setting,signals。item  pipeline 可以使用它們而且可以把item pipeline實現這些功能寫入scrapy中



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章