1. 程式人生 > 其它 >Scrapy從入門到放棄1

Scrapy從入門到放棄1

技術標籤:網路爬蟲python大資料

scrapy框架的入門使用方法,是作者學習黑馬python時的記錄

1 安裝scrapy

Linux命令:

sudo apt-get install scrapy

Windows:

pip install scrapy

解決下載緩慢問題參考:
Python第三方庫提速安裝

2 scrapy專案開發流程

  1. 建立專案:
   scrapy startproject mySpider
  1. 生成一個爬蟲:
scrapy genspider itcast itcast.cn
  1. 提取資料:

    根據網站結構在spider中實現資料採集相關內容
  2. 儲存資料:

    使用pipeline進行資料後續處理和儲存

3. 建立專案

通過命令將scrapy專案的的檔案生成出來,後續步驟都是在專案檔案中進行相關操作,下面以抓取傳智師資庫來學習scrapy的入門使用:http://www.itcast.cn/channel/teacher.shtml

建立scrapy專案的命令:

scrapy startproject <專案名字>

示例:

scrapy startproject myspider

4. 建立爬蟲

通過命令創建出爬蟲檔案,爬蟲檔案為主要的程式碼作業檔案,通常一個網站的爬取動作都會在爬蟲檔案中進行編寫。

命令:
在專案路徑下執行:

scrapy genspider <爬蟲名字>
<允許爬取的域名>

爬蟲名字: 作為爬蟲執行時的引數

允許爬取的域名: 為對於爬蟲設定的爬取範圍,設定之後用於過濾要爬取的url,如果爬取的url與允許的域不通則被過濾掉。

示例:

    cd myspider
    scrapy genspider itcast itcast.cn

5. 完善爬蟲

在上一步生成出來的爬蟲檔案中編寫指定網站的資料採集操作,實現資料提取

5.1 在/myspider/myspider/spiders/itcast.py中修改內容如下:

import scrapy

class ItcastSpider(scrapy.Spider):  # 繼承scrapy.spider
# 爬蟲名字 name = 'itcast' # 允許爬取的範圍 allowed_domains = ['itcast.cn'] # 開始爬取的url地址 start_urls = ['http://www.itcast.cn/channel/teacher.shtml'] # 資料提取的方法,接受下載中介軟體傳過來的response def parse(self, response): # scrapy的response物件可以直接進行xpath names = response.xpath('//div[@class="tea_con"]//li/div/h3/text()') print(names) # 獲取具體資料文字的方式如下 # 分組 li_list = response.xpath('//div[@class="tea_con"]//li') for li in li_list: # 建立一個數據字典 item = {} # 利用scrapy封裝好的xpath選擇器定位元素,並通過extract()或extract_first()來獲取結果 item['name'] = li.xpath('.//h3/text()').extract_first() # 老師的名字 item['level'] = li.xpath('.//h4/text()').extract_first() # 老師的級別 item['text'] = li.xpath('.//p/text()').extract_first() # 老師的介紹 print(item)
注意:
  • scrapy.Spider爬蟲類中必須有名為parse的解析
  • 如果網站結構層次比較複雜,也可以自定義其他解析函式
  • 在解析函式中提取的url地址如果要傳送請求,則必須屬於allowed_domains範圍內,但是start_urls中的url地址不受這個限制,我們會在後續的課程中學習如何在解析函式中構造傳送請求
  • 啟動爬蟲的時候注意啟動的位置,是在專案路徑下啟動
  • parse()函式中使用yield返回資料,注意:解析函式中的yield能夠傳遞的物件只能是:BaseItem, Request, dict, None

5.2 定位元素以及提取資料、屬性值的方法

解析並獲取scrapy爬蟲中的資料: 利用xpath規則字串進行定位和提取

  1. response.xpath方法的返回結果是一個類似list的型別,其中包含的是selector物件,操作和列表一樣,但是有一些額外的方法
  2. 額外方法extract():返回一個包含有字串的列表
  3. 額外方法extract_first():返回列表中的第一個字串,列表為空沒有返回None

5.3 response響應物件的常用屬性

  • response.url:當前響應的url地址
  • response.request.url:當前響應對應的請求的url地址
  • response.headers:響應頭
  • response.requests.headers:當前響應的請求頭
  • response.body:響應體,也就是html程式碼,byte型別
  • response.status:響應狀態碼

6 儲存資料

利用管道pipeline來處理(儲存)資料

6.1 在pipelines.py檔案中定義對資料的操作

  1. 定義一個管道類
  2. 重寫管道類的process_item方法
  3. process_item方法處理完item之後必須返回給引擎
import json

class ItcastPipeline():
    # 爬蟲檔案中提取資料的方法每yield一次item,就會執行一次
    # 該方法為固定名稱函式
    def process_item(self, item, spider):
        print(item)
        return item

6.2 在settings.py配置啟用管道

ITEM_PIPELINES = {
    'myspider.pipelines.ItcastPipeline': 400
}

配置項中鍵為使用的管道類,管道類使用.進行分割,第一個為專案目錄,第二個為檔案,第三個為定義的管道類。

配置項中值為管道的使用順序,設定的數值約小越優先執行,該值一般設定為1000以內。

7. 執行scrapy

命令:在專案目錄下執行scrapy crawl <爬蟲名字>



文章,是作者學習黑馬python時的記錄,如有錯誤,歡迎評論區告知
**

到這裡就結束了,如果對你有幫助你,歡迎點贊關注,你的點贊對我很重要