1. 程式人生 > >11月7日python爬蟲框架Scrapy基礎知識

11月7日python爬蟲框架Scrapy基礎知識

爬蟲最好的方式:
下載一頁匹配一頁,以後可以使用多執行緒讓抓取頁面和儲存到資料庫分開進行

爬取動態網頁的兩種方式,
1.selenium模擬瀏覽器
2. 在F12的Network中抓包,使用json字串


執行爬蟲需要安裝win23 : 
pip install pypiwin32

爬蟲名檔案中的回撥函式可以自定義
items檔案中可以自定義items


建立爬蟲專案和建立爬蟲的命令如下:
以下命令中的<>在實際使用的時候不要帶上
1.Scrapy建立爬蟲專案的命令是:
scrapy startproject <projectname>

2.Scrapy建立爬蟲的命令是,在專案名稱下執行:(最後那個是內建的crawl模板)
scrapy genspider <爬蟲名稱> <目標域名> --template=crawl

3. 爬蟲專案的執行命令是:
win需要下載pywin32  pip install pypiwin32
scrapy crawl <爬蟲名稱>

建立完爬蟲專案後會自動生成一個spider的資料夾,這個資料夾是用於存放爬蟲的
items.py模組是用於自定義型別的,型別的內容是我們想要獲取的一個物件的哪些欄位
pipelines.py模組是用於把資料持久化的,資料是從爬蟲模組的回撥函式匹配完目標資料之後傳過來的
setting.py模組是用於配置整個爬蟲專案的


如果想要儲存資料setting檔案中的pipeline一定要啟用

scrapy shell終端可用於測試xpath:
可以使用scrapy shell <網頁地址> 測試xpth公式能否正確的提取資料(相當於直接進入scrapy框架中的回撥函式測試xpath公式)

# 儲存爬取資料到一個檔案中:
進入爬蟲的專案名下執行該命令,可以把匹配出的資料直接存到當前目錄下的一個json檔案中,並設定日誌等級(可設可不設)
scrapy crawl <爬蟲名字> --output=countries.json -s LOG_LEVEL=INFO

日誌level總共分5個級別:debug < info< warning< error< critical 

已經學了三個xpath:
1, 原生的xpath , 獲取資料可以直接使用/text()
2. webdriver, 模擬瀏覽器使用的xpath, 只能定位到節點,獲取節點資料必須使用
link.get_attribute('href')

3. scrapy中的xpath ,獲取資料使用/text(), 但這是一個整合的後邊必須加.extract()

爬蟲專案一般在命令列執行,可以在專案檔案中定義一個bat檔案, 裡面寫上
專案執行的的開始命令,雙擊就可以直接運行了。

爬蟲專案可以記錄停止節點,方便下次繼續爬取,方法是在開始執行專案的後邊加一個屬性JOBDIR
scrapy crawl <爬蟲名稱>  -s LOG_LEVEL=INFO -s JOBDIR=craws/country


在setting檔案中可以定義資料管道的優先順序:
'test1.pipelines.Test1Pipeline': 300,
數越小優先順序越高, 自定義的pipeline, 裡面定義的函式必須是process_item


存檔案可在管道模組中的儲存資料類中定義一個開始和一個結束,整個爬蟲過程只打開和關閉一次,減少IO操作

爬蟲模組的回撥函式可以自定義
pipelines模組中可以定義多個pipline類用於不同的儲存功能,
比如一個存到檔案一個存到資料庫,或者是兩個類存不同的資料

中介軟體:
自定義一箇中間件,開啟setting檔案開啟


網頁直接複製的xpath有時是不準確的, 當拿不到想要的資料的時候,要從前往後一段標籤一段標籤地檢視,看到底是到哪個標籤找不到資料了,找到最後一個能打印出來的標籤,檢視標籤內打印出來的其他的資料是不是想要獲取的那個標籤,然後適當的修改路徑,scrapy中定義的想要爬取的路徑越精確越好,以防爬取不需要的資料,當爬出不需要的資料時開啟連結看一下,如果不是自己想要的資料鏈接,但是也包含在自己前面定義的想要爬取的路徑中,那就說明自己定的路徑範圍太大了,修改Rule allow中的爬取路徑,更精確就可以了。