Python爬蟲從入門到放棄(十五)之 Scrapy框架中Spiders用法

原文地址https://www.cnblogs.com/zhaof/p/7192503.htmlcss

Spider類定義瞭如何爬去某個網站,包括爬取的動做以及如何從網頁內容中提取結構化的數據,總的來講spider就是定義爬取的動做以及分析某個網頁html

工做流程分析

  1. 以初始的URL初始化Request,並設置回調函數,當該request下載完畢並返回時,將生成response,並做爲參數傳給回調函數. spider中初始的requesst是經過start_requests()來獲取的。start_requests()獲取 start_urls中的URL,並以parse以回調函數生成Request 
  2. 在回調函數內分析返回的網頁內容,能夠返回Item對象,或者Dict,或者Request,以及是一個包含三者的可迭代的容器,返回的Request對象以後會通過Scrapy處理,下載相應的內容,並調用設置的callback函數
  3. 在回調函數內,能夠經過lxml,bs4,xpath,css等方法獲取咱們想要的內容生成item
  4. 最後將item傳遞給Pipeline處理

咱們以經過簡單的分析源碼來理解
我一般在寫spiders下寫爬蟲的時候,咱們並無寫start_requests來處理start_urls中的url,這是由於咱們在繼承的scrapy.Spider中已經寫過了,咱們能夠點開scrapy.Spider查看分析dom

經過上述代碼咱們能夠看到在父類裏這裏實現了start_requests方法,經過make_requests_from_url作了Request請求
以下圖所示的一個例子,parse回調函數中的response就是父類列start_requests方法調用make_requests_from_url返回的結果,而且在parse回調函數中咱們能夠繼續返回Request,以下屬代碼中yield Request()並設置回調函數。scrapy

 

spider內的一些經常使用屬性

咱們全部本身寫的爬蟲都是繼承與spider.Spider這個類ide

name函數

定義爬蟲名字,咱們經過命令啓動的時候用的就是這個名字,這個名字必須是惟一的post

allowed_domains網站

包含了spider容許爬取的域名列表。當offsiteMiddleware啓用時,域名不在列表中URL不會被訪問
因此在爬蟲文件中,每次生成Request請求時都會進行和這裏的域名進行判斷url

start_urlsspa

起始的url列表
這裏會經過spider.Spider方法中會調用start_request循環請求這個列表中每一個地址。

custom_settings

自定義配置,能夠覆蓋settings的配置,主要用於當咱們對爬蟲有特定需求設置的時候

設置的是以字典的方式設置:custom_settings = {}

from_crawler

這是一個類方法,咱們定義這樣一個類方法,能夠經過crawler.settings.get()這種方式獲取settings配置文件中的信息,同時這個也能夠在pipeline中使用

start_requests()
這個方法必須返回一個可迭代對象,該對象包含了spider用於爬取的第一個Request請求
這個方法是在被繼承的父類中spider.Spider中寫的,默認是經過get請求,若是咱們須要修改最開始的這個請求,能夠重寫這個方法,如咱們想經過post請求

make_requests_from_url(url)
這個也是在父類中start_requests調用的,固然這個方法咱們也能夠重寫

parse(response)這個其實默認的回調函數負責處理response並返回處理的數據以及跟進的url該方法以及其餘的Request回調函數必須返回一個包含Request或Item的可迭代對象

相關文章
相關標籤/搜索