1、python環境,這裡我使用的是python3.6,建議不要使用該版本之後的版本,因為後面還需要安裝對應python版本的pywin32程式,而該程式暫時沒有python3.6後面的對應版本。
2、scrapy 框架,這個直接使用pip install 進行安裝就行。
3、對應python版本的pywin32程式,這個可以根據自己的電腦版本搜尋對應的進行安裝即可(這裡有點小坑,一定要搜尋對應自己python版本以及自己電腦位數的安裝程式,我當時安裝的時候怎麼裝都裝不上,最後搜到了乙個.whl的對應檔案,通過pip install 才安裝上)。
(2)有了軟硬體環境,還需要知道scrapy中的執行邏輯,這裡推薦看看這篇部落格,寫得很形象(但是按照它的教程一步一步下去會會出現很多錯誤,可能跟執行環境有關)。
(1)在命令列中輸入:
scrapy startproject myspider
會得到如下的目錄結構:
它們分別如下意義:
接下來需要定義我們爬取資料的儲存結構,根據我們要爬取得目標(教課老師的資訊),我們需要定義三個屬性,分別是name、title、infor。他們分別代表老師的姓名、頭銜、簡介。
定義結構我們需要在之前生成的items.py檔案中去定義。之前已經生成了myspider這個類了,為了跟目錄名進行區分,我們將該類名改為itcastitem,並且給它定義三個屬性:
import scrapy
class itcastitem(scrapy.item):
# define the fields for your item here like:
# name = scrapy.field()
name=scrapy.field()
title=scrapy.field()
infor=scrapy.field()
pass
為了實現對資料的去重、驗證等操作,我們需要在piplines.py中進行相關的設定,並啟用。
import codecs
import json
class myspiderpipeline(object):
def __init__(self):
pass
self.file = codecs.open('teacher.json', mode='wb', encoding='utf-8')
def process_item(self, item, spider):
line=json.dumps(dict(item),ensure_ascii=false)+'\n'
self.file.write(line)
return item
如上所示,__init__(self)函式是該類別的建構函式,用於初始化操作。在程式中,我們定義輸出的檔名以及開啟的方式等。
然後process_item函式是必須呼叫的用來處理item,並且返回值必須為item類的物件,或者是丟擲dropitem異常。並且上述方法將得到的item實現解碼,以便正常顯示中文,最終儲存到json檔案中。這裡注意一定要在dumps中加入 ensure_ascii=false這句話,否則生成的json檔案會以unicode的編碼格式存放。
最後別忘了還要在settings.py檔案中加入如下**:
item_pipelines =
該**的作用是啟動pipline實現對spider返回資料的按序處理。
經過前面的準備工作,最後就是編寫爬蟲指令碼了。
首先需要在spiders資料夾下新建乙個python檔案,將它命名為itcast,新建itcastspider類,該類有三個必要屬性和乙個必要方法,其中name屬性是啟動爬蟲時用以區分其它爬蟲專案的標誌,allowed_domains屬性是用來限制爬蟲鏈結所屬的域的,start_url則是爬蟲指令碼第一次訪問的鏈結位址。然後還有乙個必要方法即parse方法,這個是定義用來解析爬取到網頁的必須呼叫的乙個方法。**如下所示:
# -*- coding: utf-8 -*-
import scrapy
from myspider.items import itcastitem
class itcastspider(scrapy.spider):
name = 'itcast'
allowed_domains = ['itcast.cn']
start_urls = ['']
def parse(self, response):
print('開始爬蟲...')
for each in response.xpath("//div[@class='li_txt']"):
item=itcastitem()
name=each.xpath("h3/text()").extract()
title=each.xpath("h4/text()").extract()
infor=each.xpath("p/text()").extract()
item['name']=name[0]
item['title']=title[0]
item['infor']=infor[0]
yield item
程式首先對div下所有class為"li_txt"的標籤進行遍歷,然後對其中的每個元素分別進行解析,然後迭代返回item物件給pipline進行存入處理。
最後在命令列中執行啟動爬蟲:
scrapy crawl itcast
爬蟲過程如下:
最後的爬蟲結果如下:
爬蟲框架scarpy報錯
我以為scarpy就是個簡單的庫,安裝後直接import scrapy就行了,執行的時候報錯 import scrapy attributeerror module scrapy has no attribute spider 我還很奇怪為什麼他不報錯 no module named scrapy。...
爬蟲的框架 Scarpy
1 新建scrapy專案 進入專案目錄,按住shift,選擇windows powershell,在彈出的視窗輸入 scarpy startproject 專案名 2 新建爬蟲案例 在新建的專案根目錄中,按住shift,選擇windows powershell,在彈出的視窗輸入 scrapy gen...
Scrapy python爬蟲框架 入門筆記
本文章僅作為個人筆記 scrpy官網 scrpy官方文件 scrpy中文文件 個人scrapydemo專案位址 python環境安裝 pip easy install pip mac下安裝 centos7下安裝 scrapy 安裝pip install scrapy建立專案scrapy startp...