Scrapy從入門到放棄1
阿新 • • 發佈:2020-12-24
scrapy框架的入門使用方法,是作者學習黑馬python時的記錄
1 安裝scrapy
Linux命令:
sudo apt-get install scrapy
Windows:
pip install scrapy
解決下載緩慢問題參考:
Python第三方庫提速安裝
2 scrapy專案開發流程
- 建立專案:
scrapy startproject mySpider
- 生成一個爬蟲:
scrapy genspider itcast itcast.cn
- 提取資料:
根據網站結構在spider中實現資料採集相關內容 - 儲存資料:
使用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規則字串進行定位和提取
- response.xpath方法的返回結果是一個類似list的型別,其中包含的是selector物件,操作和列表一樣,但是有一些額外的方法
- 額外方法extract():返回一個包含有字串的列表
- 額外方法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檔案中定義對資料的操作
- 定義一個管道類
- 重寫管道類的process_item方法
- 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時的記錄,如有錯誤,歡迎評論區告知
**
到這裡就結束了,如果對你有幫助你,歡迎點贊關注,你的點贊對我很重要