1-1主要內(nèi)容lscrapy概述及安裝lscrapy基礎(chǔ)操作n入門程序l核心APIl案例操作~10個爬蟲程序[10個不同的類型的網(wǎng)站數(shù)據(jù)]lscrapy shelll深度爬蟲l請求響應(yīng)對象l分布式操作等等1-2內(nèi)容1.scrapy概述官方網(wǎng)站:http://scrapy.org [orginzation]使用Python開發(fā)的主要進行數(shù)據(jù)采集的一個應(yīng)用程序框架,核心使用它來進行爬蟲程序的快速開發(fā),底層使用了twisted異步模塊炮捧,所以在進行數(shù)據(jù)采集下載時效率非常高!ubuntu/macos 下唬血,在有完善的python環(huán)境的基礎(chǔ)上直接安裝 scrapywindows下:注意~安裝分兩步進行l(wèi)先安裝scrapy# 管理員身份運行cmd窗口pip install scrapyoreasy_install scrapyPS:注意安裝完scrapy之后,可以正常的進行scrapy項目的開發(fā)唤崭,但是在windows上運行項目會出現(xiàn)問題拷恨,如果出現(xiàn)類似于WinError這樣的的問題,請安裝下面的模塊l安裝win32# 需要安裝一個pypiwin32模塊谢肾,用于scrapy模塊可能調(diào)用win底層C庫進行函數(shù)操作pip install pypiwin322.項目開發(fā)——創(chuàng)建scrapy項目通過執(zhí)行如下命令腕侄,來創(chuàng)建scrapy項目# 通過scrapy命令,加上startproject選項芦疏,創(chuàng)建一個名稱為spider_name的爬蟲項目scrapy startproject在pycharm中直接運行工具中的cmd終端窗口冕杠,執(zhí)行如下命令創(chuàng)建一個爬蟲項目
scrapy startproject myspider
注意:關(guān)于終端窗口、命令窗口酸茴、shell窗口
windows系統(tǒng)中:終端窗口分预、命令窗口 -> cmd窗口
新系統(tǒng)中win10:shell窗口->power shell->可以執(zhí)行常見的linux命令
終端窗口~Terminal
ubuntu(like linux/unix)系統(tǒng)中:終端~shell->shell命令窗口
Terminal->shell窗口
Mac OS: 終端->shell窗口
創(chuàng)建好的項目文件結(jié)構(gòu)如下:
|-- myspider/? 項目根目錄
? ? |-- scrapy.cfg? 項目配置文件 [cfg: config]
|-- myspider/? 爬蟲 模塊->以后的爬蟲程序開發(fā)都在這個模塊中
|-- spiders/? 爬蟲程序所在的目錄
|-- items.py? 采集的數(shù)據(jù)->定義封裝模型類的模塊
|-- pipelines.py 采集的數(shù)據(jù)->采集完成之后進行數(shù)據(jù)驗證、存儲的模塊
|-- middlewares.py 中間件定義的模塊
|-- settings.py 項目設(shè)置模塊
3. 開發(fā)爬蟲程序
準(zhǔn)備工作薪捍,分三步進行
(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=2
招聘崗位:job
發(fā)布公司:company
薪水待遇:salary
(2) 定義采集的字段封裝的Item類型配喳,在items.py模塊中,定義Item類
我們通過scrapy項目中的items.py模塊定義封裝采集數(shù)據(jù)字段的類型
為了能使用scrapy提供的各種內(nèi)置功能凳干,讓定義的類型繼承自scrapy.Item類型晴裹;類型中的字段屬性通過scrapy.Field()進行定義!
import scrapy
class ZhilianItem(scrapy.Item):
? ? '''
? ? 自定義封裝智聯(lián)招聘的item類型救赐,用于封裝采集到的智聯(lián)網(wǎng)站的數(shù)據(jù)
? ? '''
? ? # 定義屬性字段
? ? job = scrapy.Field()
? ? company = scrapy.Field()
? ? salary = scrapy.Field()
(3) 在spiders/zhilianspider.py中開發(fā)爬蟲程序涧团,采集初步數(shù)據(jù)
為了可以直接使用scrapy內(nèi)置的爬蟲操作,讓scrapy自動采集數(shù)據(jù)经磅,我們需要定義一個爬蟲處理類
l 在spiders/zhilianspider.py模塊中定義ZhilianSpider類型
l 繼承自scrapy.Spider
l 類型中的屬性:name屬性~爬蟲名稱少欺,用于在命令行啟動爬蟲時調(diào)用
l 類型中的屬性:start_urls屬性~采集數(shù)據(jù)的初始url地址[列表、元組]
l 類型中的屬性:allowed_domains屬性~采集數(shù)據(jù)的網(wǎng)站域名限制
l 類型中的方法:parse(self, response)采集完數(shù)據(jù)之后自動執(zhí)行的函數(shù)
數(shù)據(jù)處理
(4) 核心:在pipelines.py模塊中馋贤,定義處理Item數(shù)據(jù)的piplelines,將數(shù)據(jù)存儲到數(shù)據(jù)庫中給其他項目做數(shù)據(jù)準(zhǔn)備
備注:
引擎:engine->scrapy引擎模塊:engine.py
調(diào)度器:scheduler->scrapy調(diào)度模塊:scheduler.py
下午課程安排:
l 回顧:python~orm操作
l 了解:orm->mysqldb\pymysql\sqlalchemy
n mysqldb:2.4- 3.4- [2.7—兼容性很差]【了解】
n pymysql:逐步取代mysqldb成為主流底層orm操作模塊
n sqlalchemy:逐步成為python操作mysql數(shù)據(jù)庫的主流模塊
n 擴展:了解python操作oracle數(shù)據(jù)庫畏陕、mongdb數(shù)據(jù)庫\postgresql數(shù)據(jù)庫的核心操作模塊
l 掌握:sqlalchemy 操作數(shù)據(jù)
n 回顧面向?qū)ο蟮姆庋b
n 爬蟲中數(shù)據(jù)處理的使用——爬蟲程序中使用sqlalchemy操作數(shù)據(jù)
l 擴展:pymongo 操作數(shù)據(jù)
l 核心:項目案例~10個爬蟲程序[10個不同的類型的網(wǎng)站數(shù)據(jù)]
n 3種不同數(shù)據(jù)的采集(技術(shù)實現(xiàn))
u 反爬蟲較為復(fù)雜網(wǎng)站的數(shù)據(jù)操作[selenium + phantomjs]
l 新浪微博登錄之后的個人中心頁面數(shù)據(jù)配乓,提取[微博主名稱、發(fā)布的微博惠毁,發(fā)布的時間]
u 智聯(lián)招聘網(wǎng)站數(shù)據(jù)的采集[工作犹芹、公司、薪水]->mysql鞠绰、mongodb
u 段子來了[段子腰埂、發(fā)布時間、發(fā)布人]->mysql蜈膨、mongodb
n 采集5W條商品數(shù)據(jù)
u 商品圖片屿笼、名稱、單價翁巍、描述[驴一、 類型]
u 統(tǒng)計采集的時間、數(shù)據(jù)量大小
n 任務(wù):和10班的同學(xué)進行溝通灶壶,提供爬蟲程序采集適量數(shù)據(jù)
u 1~5個人一組肝断,負責(zé)對方一個項目的數(shù)據(jù)提供
1. orm操作
orm:object relation mapping 對象關(guān)系映射,主要用于將程序中的數(shù)據(jù)和數(shù)據(jù)庫中的記錄進行對應(yīng)之后的增刪改查操作的一種編程思想
2. 常規(guī)的orm操作
python->mysqldb完成基礎(chǔ)的orm操作
mysqldb->python2.4- python-3.4-
python->pymysql完成基礎(chǔ)操作驰凛,替代mysqldb
pymysql.install_as_MySQLdb()
python高效orm處理->sqlalchemy較為完善的框架胸懈,可以直接進行數(shù)據(jù)的CRUD
3. sqlalchemy
核心主要針對mysql數(shù)據(jù)庫的一個orm操作模塊,對py2\py3都有良好的支持
mysqldb/pymysql/sqlalchemy->官方文檔[操作手冊]
4. 爬蟲中對于sqlalchemy的使用
爬蟲的核心:采集數(shù)據(jù)->數(shù)據(jù)存儲[內(nèi)存恰响、文件趣钱、數(shù)據(jù)庫]
數(shù)據(jù)采集->數(shù)據(jù)篩選->數(shù)據(jù)存儲->數(shù)據(jù)清洗->數(shù)據(jù)分析->結(jié)果呈現(xiàn)
數(shù)據(jù)篩選:
scrapy框架默認提供了各種篩選方式,通過選擇器Selector進行處理渔隶,內(nèi)建并且封裝好羔挡,可以直接通過response響應(yīng)對象調(diào)用
重點內(nèi)容:爬蟲采集數(shù)據(jù)篩選測試
進入命令行洁奈,執(zhí)行命令
scrapy shell “url”
執(zhí)行之后進入python命令行,此時~響應(yīng)的數(shù)據(jù)已經(jīng)被包含到response變量中了绞灼,可以直接操作response進行數(shù)據(jù)篩選測試
scrapy完整的項目流程
l 創(chuàng)建爬蟲項目[可以包含多個爬蟲程序]
n scrapy startproject myspider
l 定義采集數(shù)據(jù)的Item封裝類型
n 修改myspider/items.py利术,添加ZhilianItem
n 繼承scrapy.Item
n 屬性通過scrapy.Field()定義
l 開發(fā)爬蟲程序
n 在myspider/spiders/添加zhilianspider.py模塊
n 定義ZhilianSpider類型【爬蟲程序】
n 繼承scrapy.Spider
n name屬性:爬蟲名稱,用于在命令行啟動指定爬蟲使用
n allowed_domains屬性:域名限制~限制爬蟲只能在某個域名下進行數(shù)據(jù)采集
n start_urls屬性:元組/列表低矮,定義了所有初始采集數(shù)據(jù)的url路徑
n parse(self, response)函數(shù):函數(shù)中的response參數(shù)接受了下載模塊采集到的url中的數(shù)據(jù)
u 這個函數(shù)中印叁,可以進行數(shù)據(jù)的xpath/re/css選擇器進行篩選
u 將篩選得到的數(shù)據(jù),封裝在ZhilianItem對象中
u 通過協(xié)程的方式將item對象交給pipelines.py模塊進行處理
l yield item
l 開發(fā)管道模塊
n 修改myspider/pipelines.py模塊军掂,添加ZhilianPipleline類型
u __init__(self):主要用于進行資源的初始化操作轮蜕,如打開文件、打開和數(shù)據(jù)庫的連接等等蝗锥,有必要編寫
l 初始化了sqlalchemy的數(shù)據(jù)庫連接
u open_spider(self, spider):當(dāng)spider爬蟲啟動的時候自動調(diào)用的函數(shù)跃洛,也經(jīng)常用于精確的資源初始化工作,一般不寫
u close_spider(self, spider):當(dāng)spider爬蟲關(guān)閉的時候自動調(diào)用的函數(shù)终议,經(jīng)常用于資源的回收汇竭,如關(guān)閉打開的文件、關(guān)閉數(shù)據(jù)庫連接等等穴张,有必要編寫
l 關(guān)閉了sqlalchemy的數(shù)據(jù)庫連接
u process_item(self, item, spider):核心處理函數(shù)细燎,進行采集到的數(shù)據(jù)item中的實際數(shù)據(jù)的驗證、存儲工作皂甘,必須寫
l 通過sqlalchemy進行了數(shù)據(jù)的存儲
n 修改myspider/settings.py設(shè)置文件玻驻,添加ITEM_PIPELINES = []配置選項中,將我們自定義的ZhilianPipeline注冊給scrapy
l 完成偿枕!數(shù)據(jù)被正確采集到了數(shù)據(jù)庫中
注意問題:
Python2的編碼問題璧瞬、數(shù)據(jù)庫交互時的編碼問題
網(wǎng)頁數(shù)據(jù)分析問題[耗時耗力,要有耐心]
注意scrapy的編程步驟渐夸!