Scrapy框架的一些學習心得

2021-08-08 17:38:32 字數 4106 閱讀 8843

2.1 爬蟲檔案的存放路徑的話:在下面這裡面配置

spider_modules = ['itcast.spiders']

newspider_module = 'itcast.spiders'

2.2 下面的這個可以配置agent 的一些相關
# crawl responsibly by identifying yourself (and your website) on the user-agent

user_agent = 'itcast (+'

2.3 預設開啟的執行緒數為16,可以在下面的這些**裡面設定
# configure maximum concurrent requests performed by scrapy (default: 16)

concurrent_requests = 32

2.4 預設抓取資料是不等待的,可以在下面設定
# configure a delay for requests for the same website (default: 0)

# see

# see also autothrottle settings and docs

download_delay = 3

2.5 下面的這個是設定怕從是否遵從某個規定的,最好不要遵循不然的話好多資料會抓不到的
# obey robots.txt rules

# robotstxt_obey = true

2.6未完待續3.1 name = 『***x』

這個表示當前的爬蟲類的唯一表示,乙個專案必須唯一,用來啟動爬蟲或者其他的時候用到

3.2 allowed_domains = [『

這個則表示當前的爬蟲會在哪些網域名稱下面抓取資料,如果不在這個網域名稱下面的話那麼就不會被抓取資料

3.3 start_urls = [『

起始的url位址列表,爬蟲執行後第一批請求,將從這個列表獲取

3.4 def parse(self, response)

這個方法會在start_urls頁面之後被執行,可以在這裡面執行相應的解析頁面的操作,例如:

nodelist = response.xpath("//div[@class='li_txt']")

# itemlist =

for node in nodelist:

# 建立item欄位物件,用來儲存資訊

item = itcastitem()

# 下面的返回的是乙個xpath物件列表,所以需要使用extract()方法來將其轉換成unicode字串

name = node.xpath("./h3/text()").extract()

title = node.xpath("./h4/text()").extract()

info = node.xpath("./p/text()").extract()

# 儲存到item欄位物件裡面

item['name'] = name[0]

item['title'] = title[0]

item['info'] = info[0]

# 返回提取的每乙個item資料給管道,給管道處理,然後還回來繼續執行當前的for迴圈裡面的**

yield item

上面的**使用了xpath來解析頁面的結構,scrapy預設支援將資料以4中形式輸出,可以通過

scrapy crawl 「爬蟲唯一表示名稱」 -o itcast.json

scrapy crawl 「爬蟲唯一表示名稱」 -o itcast.csv

還兩個忘掉了,大概語法就是這樣的

還可以直接將item返回給相應的管道處理,使用下面的這個**實現

yield item
注意如果要返回給管道的話需要在settings.py檔案裡面將管道的配置開啟

4.1 pipelines.py檔案的一些方法釋義

def

process_item

(self, item, spider):

return item

預設的只有上面這乙個方法的,這個方法是用來處理爬蟲類裡面傳遞來的item的,可以在裡面定義自己的處理邏輯,注意下需要**最後必須return item,item在管道裡面處理完畢之後需要再傳遞給引擎,return item就是將處理好的item傳遞給引擎的,如果不 return item的話那麼就會在這裡中斷掉,那麼就會出錯,再就是如果存在多個管道類的話那麼return item就表示將item接著傳遞給下乙個管道,執行那個管道的業務邏輯

再就是引數列表裡面的spider就是表示傳遞item過來的spider物件,可以通過.name等方法檢視spider的名字等資訊

def

__init__

(self):

可以在預設的方法之外新增這個初始化方法,這個方法的話初始化一些需要初始化的東西

def

close_spider

(self, spider):

還可以新增這個方法,這個方法可以算是乙個結束方法,裡面的話可以執行一些關閉某些流等操作,類似的資料庫的關閉等可以在這個方法裡面執行

4.2 自定義管道的配置

可以在settings.py裡面設定自定義的管道

# configure item pipelines

# see

item_pipelines =

item_pipelines這個是乙個字典,可以在裡面新增自定義的管道,其中itcast表示專案名,pipelines這個表示具體的檔案,itcastpipeline表示具體的管道類,後面的300則表示有限制,範圍在0-1000,值越小優先順序越高

item會順序的經過所有的管道類,然後全部經過後下乙個item進來,接著進入全部的管道

selectorts有四個基本的方法,最常用的就是xpath:

xpath():傳入xpath表示式,返回該列表所對應的所有節點的selectors list列表

extract():序列化該節點為unicode字串並返回list

css():傳入css表示式,返回該表示式所對應的所有節點的selector list列表,語法同beautifulsoup4

re():根據傳入的正規表示式對資料進行提取,返回unicode字串list列表

1 爬蟲檔案請求是傳送請求,處理響應的

2 item檔案是定義欄位的

3 管道檔案的話是進一步處理item的1 首先執行爬蟲檔案,爬蟲檔案會根據start_urls的位址傳送請求,然後得到響應

2 會執行parse方法,然後我們可以通過xpath或者正則等處理,然後存放到item中

3 可以同過yield來將item返回給管道,給管道進一步處理,如果存在多個管道的話那麼這個item就會根據settings.py檔案裡面定義的優先順序來順序執行,直到執行完畢全部的管道

4 有下乙個item的話那麼久執行下乙個item

5 沒有的話那麼就會返回給引擎1 爬蟲類的話需要將得到的網頁位址存放在item中

2 管道類需要繼承imagespipeline類(需要匯入),然後重寫get_media_requests方法,類似下面這樣

def

get_media_requests

(self, item, info):

imagelink = item["imagelink"]

yield scrapy.request(imagelink)

3 再就是需要在配置檔案中配置的存放路徑**季下面的images_store部分,如果爬取的頁面為手機端的頁面的話那麼需要設定下user_agent,如下面這樣,下面的這個為iphone的user_agent例子
images_store = "/users/yedeguo/desktop/鬥魚"

# crawl responsibly by identifying yourself (and your website) on the user-agent

' like gecko) version/6.0 mobile/10a403 safari/8536.25'

關於python元組的一些學習心得

初識元組是覺得它其實與列表沒多大區別,功能還少了,感覺沒啥卵用 orz 可當我越深入的去了解這個傢伙,就越為之感到驚嘆,也被它獨特的魅力折服。好,話不多說,先貼 定義乙個元組 和列表類似,只不過將換成 ps 元組裡的元素可以是不同型別 元組的特點是 元組裡的元素時不能修改,只有查閱功能 列表有增刪改...

Cairngorm框架學習心得之一

cairngorm框架我知道名字很久,但是最近才開始認真的研究它.使用框架最大的好處就是對於團隊合作很有幫助.不過我從來沒有參加過任何程式設計團隊,但是仍然覺得應該使用它,主要還是為了將來的補充模組和其他伺服器轉換更方便.今天我想說的是另乙個好處.很早就在官方 發現了cairngorm又乙個ecli...

學習心得(一)

1.利用好手頭上的資源而不要一味地屯資源,資源只有被利用才是有價值的 2.關於筆記 筆記只是幫助我們學習和精進的一種工具,它只是一種方法,一種手段,但是絕不是我們的目的,沒有必要強迫自己在做筆記時,把每乙個字都寫的端正和美觀,把筆記做得完美,不僅消耗我們的時間,而且很可能它浪費了我們原本可以用來做題...