爬蟲基礎(chǔ)

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的編程步驟渐夸!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彪蓬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捺萌,更是在濱河造成了極大的恐慌档冬,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桃纯,死亡現(xiàn)場離奇詭異酷誓,居然都是意外死亡,警方通過查閱死者的電腦和手機态坦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門盐数,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伞梯,你說我怎么就攤上這事玫氢≈闾耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵漾峡,是天一觀的道長攻旦。 經(jīng)常有香客問我,道長生逸,這世上最難降的妖魔是什么牢屋? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮槽袄,結(jié)果婚禮上烙无,老公的妹妹穿的比我還像新娘。我一直安慰自己遍尺,他們只是感情好截酷,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乾戏,像睡著了一般合搅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歧蕉,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音康铭,去河邊找鬼惯退。 笑死,一個胖子當(dāng)著我的面吹牛从藤,可吹牛的內(nèi)容都是我干的催跪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼夷野,長吁一口氣:“原來是場噩夢啊……” “哼懊蒸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悯搔,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤骑丸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妒貌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體通危,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年灌曙,在試婚紗的時候發(fā)現(xiàn)自己被綠了菊碟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡在刺,死狀恐怖逆害,靈堂內(nèi)的尸體忽然破棺而出头镊,到底是詐尸還是另有隱情,我是刑警寧澤魄幕,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布相艇,位于F島的核電站,受9級特大地震影響梅垄,放射性物質(zhì)發(fā)生泄漏厂捞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一队丝、第九天 我趴在偏房一處隱蔽的房頂上張望靡馁。 院中可真熱鬧,春花似錦机久、人聲如沸臭墨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胧弛。三九已至,卻和暖如春侠畔,著一層夾襖步出監(jiān)牢的瞬間结缚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工软棺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留红竭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓喘落,卻偏偏與公主長得像茵宪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瘦棋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容