1.scrapy概述
1.1. 官方網(wǎng)站:http://scrapy.org [orginzation]
1.2. Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。
2.scrapy安裝
2.1 :ubuntu/macos 下掀淘,在有完善的python環(huán)境的基礎(chǔ)上直接安裝 scrapy
2.2:windows下:注意~安裝分兩步進(jìn)行
1.先安裝scrapy
# 管理員身份運(yùn)行cmd窗口
pip install scrapy
or
easy_install scrapy
PS:注意
安裝完scrapy之后,可以正常的進(jìn)行scrapy項(xiàng)目的開發(fā),但是在windows上運(yùn)行項(xiàng)目會(huì)出現(xiàn)問題因块,如果出現(xiàn)類似于WinError這樣的的問題,請(qǐng)安裝下面的模塊
2.安裝win32
# 需要安裝一個(gè)pypiwin32模塊籍铁,用于scrapy模塊可能調(diào)用win底層C庫(kù)進(jìn)行函數(shù)操作
pip install pypiwin32
3. 項(xiàng)目開發(fā)——?jiǎng)?chuàng)建scrapy項(xiàng)目
3.1:通過(guò)執(zhí)行如下命令涡上,來(lái)創(chuàng)建scrapy項(xiàng)目
# 通過(guò)scrapy命令,加上startproject選項(xiàng)拒名,創(chuàng)建一個(gè)名稱為spider_name的爬蟲項(xiàng)目
scrapy startproject <spider_name>
例如:在pycharm中直接運(yùn)行工具中的cmd終端窗口吩愧,執(zhí)行如下命令創(chuàng)建一個(gè)爬蟲項(xiàng)目
scrapy startproject myspider
創(chuàng)建好的項(xiàng)目文件結(jié)構(gòu)如下:
|-- myspider/ 項(xiàng)目根目錄
|-- scrapy.cfg 項(xiàng)目配置文件 [cfg: config]
|-- myspider/ 爬蟲 模塊->以后的爬蟲程序開發(fā)都在這個(gè)模塊中
|-- spiders/ 爬蟲程序所在的目錄
|-- items.py 采集的數(shù)據(jù)->定義封裝模型類的模塊
|-- pipelines.py 采集的數(shù)據(jù)->采集完成之后進(jìn)行數(shù)據(jù)驗(yàn)證、存儲(chǔ)的模塊
|-- middlewares.py 中間件定義的模塊
|-- settings.py 項(xiàng)目設(shè)置模塊
4. 開發(fā)爬蟲程序-智聯(lián)
準(zhǔn)備工作增显,分四部步進(jìn)行
4.1:分析爬蟲要采集的url地址雁佳,分析采集的數(shù)據(jù)字段
http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=cab76822e6044ff4b4b1a907661851f9&p=1]http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=cab76822e6044ff4b4b1a907661851f9&p=1)
http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&sg=cab76822e6044ff4b4b1a907661851f9&p=2]
招聘崗位:job
發(fā)布公司:company
薪水待遇:salary
4.2:定義采集的字段封裝的Item類型,在items.py模塊中,定義Item類
我們通過(guò)scrapy項(xiàng)目中的items.py模塊定義封裝采集數(shù)據(jù)字段的類型
為了能使用scrapy提供的各種內(nèi)置功能糖权,讓定義的類型繼承自scrapy.Item類型堵腹;類型中的字段屬性通過(guò)scrapy.Field()進(jìn)行定義!
import scrapy
class ZhilianItem(scrapy.Item):
'''
自定義封裝智聯(lián)招聘的item類型星澳,用于封裝采集到的智聯(lián)網(wǎng)站的數(shù)據(jù)
'''
# 定義屬性字段
job = scrapy.Field()
company = scrapy.Field()
salary = scrapy.Field()
4.3:在spiders/zhilianspider.py中開發(fā)爬蟲程序疚顷,采集初步數(shù)據(jù)
為了可以直接使用scrapy內(nèi)置的爬蟲操作,讓scrapy自動(dòng)采集數(shù)據(jù)募判,我們需要定義一個(gè)爬蟲處理類
1.在spiders/zhilianspider.py模塊中定義ZhilianSpider類型
2.繼承自scrapy.Spider
3.類型中的屬性:name屬性~爬蟲名稱荡含,用于在命令行啟動(dòng)爬蟲時(shí)調(diào)用
4.類型中的屬性:start_urls屬性~采集數(shù)據(jù)的初始url地址[列表、元組]
5.類型中的屬性:allowed_domains屬性~采集數(shù)據(jù)的網(wǎng)站域名限制
6.類型中的方法:parse(self, response)采集完數(shù)據(jù)之后自動(dòng)執(zhí)行的函數(shù)
4.4:核心:在pipelines.py模塊中届垫,定義處理Item數(shù)據(jù)的piplelines释液,將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中給其他項(xiàng)目做數(shù)據(jù)準(zhǔn)備
備注:
引擎:engine->scrapy引擎模塊:engine.py
調(diào)度器:scheduler->scrapy調(diào)度模塊:scheduler.py
5.爬蟲采集數(shù)據(jù)篩選測(cè)試
進(jìn)入命令行,執(zhí)行命令
scrapy shell “url”
執(zhí)行之后進(jìn)入python命令行装处,此時(shí)~響應(yīng)的數(shù)據(jù)已經(jīng)被包含到response變量中了误债,可以直接操作response進(jìn)行數(shù)據(jù)篩選測(cè)試
6.開發(fā)一個(gè)完整項(xiàng)目的流程
- 創(chuàng)建爬蟲項(xiàng)目[可以包含多個(gè)爬蟲程序
scrapy startproject myspider
- 定義采集數(shù)據(jù)的Item封裝類型
修改myspider/items.py,添加ZhilianItem
繼承scrapy.Item
屬性通過(guò)scrapy.Field()定義
- 開發(fā)爬蟲程序
在myspider/spiders/添加zhilianspider.py模塊
定義ZhilianSpider類型【爬蟲程序】
繼承scrapy.Spider
name屬性:爬蟲名稱妄迁,用于在命令行啟動(dòng)指定爬蟲使用
allowed_domains屬性:域名限制~限制爬蟲只能在某個(gè)域名下進(jìn)行采集 start_urls屬性:元組/列表寝蹈,定義了所有初始采集數(shù)據(jù)的url路徑
parse(self, response)函數(shù):函數(shù)中的response參數(shù)接受了下載模塊采集到的url中的數(shù)據(jù)
這個(gè)函數(shù)中,可以進(jìn)行數(shù)據(jù)的xpath/re/css選擇器進(jìn)行篩選
將篩選得到的數(shù)據(jù)登淘,封裝在ZhilianItem對(duì)象中
通過(guò)協(xié)程的方式將item對(duì)象交給pipelines.py模塊進(jìn)行處理
yield item
- 開發(fā)管道模塊
修改myspider/pipelines.py模塊箫老,添加ZhilianPipleline類型
__init__(self):主要用于進(jìn)行資源的初始化操作,如打開文件黔州、打開和數(shù)據(jù)庫(kù)的連接等等耍鬓,有必要編寫
初始化了sqlalchemy的數(shù)據(jù)庫(kù)連接
open_spider(self, spider):當(dāng)spider爬蟲啟動(dòng)的時(shí)候自動(dòng)調(diào)用的函數(shù),也經(jīng)常用于精確的資源初始化工作流妻,一般不寫
close_spider(self, spider):當(dāng)spider爬蟲關(guān)閉的時(shí)候自動(dòng)調(diào)用的函數(shù)牲蜀,經(jīng)常用于資源的回收,如關(guān)閉打開的文件绅这、關(guān)閉數(shù)據(jù)庫(kù)連接等等涣达,有必要編寫
關(guān)閉了sqlalchemy的數(shù)據(jù)庫(kù)連接
process_item(self, item, spider):核心處理函數(shù),進(jìn)行采集到的數(shù)據(jù)item中的實(shí)際數(shù)據(jù)的驗(yàn)證证薇、存儲(chǔ)工作度苔,必須寫
通過(guò)sqlalchemy進(jìn)行了數(shù)據(jù)的存儲(chǔ)
修改myspider/settings.py設(shè)置文件,添加ITEM_PIPELINES = []配置選項(xiàng)中棕叫,將我們自定義的ZhilianPipeline注冊(cè)給scrapy 完成林螃!數(shù)據(jù)被正確采集到了數(shù)據(jù)庫(kù)中
PS:注意問題:
Python2的編碼問題、數(shù)據(jù)庫(kù)交互時(shí)的編碼問題
網(wǎng)頁(yè)數(shù)據(jù)分析問題[耗時(shí)耗力俺泣,要有耐心!