爬蟲基礎(chǔ)

1-1主要內(nèi)容lscrapy概述及安裝lscrapy基礎(chǔ)操作n入門程序l核心APIl案例操作~10個(gè)爬蟲程序[10個(gè)不同的類型的網(wǎng)站數(shù)據(jù)]lscrapy shelll深度爬蟲l請求響應(yīng)對象l分布式操作等等1-2內(nèi)容1.scrapy概述官方網(wǎng)站:http://scrapy.org [orginzation]使用Python開發(fā)的主要進(jìn)行數(shù)據(jù)采集的一個(gè)應(yīng)用程序框架,核心使用它來進(jìn)行爬蟲程序的快速開發(fā),底層使用了twisted異步模塊,所以在進(jìn)行數(shù)據(jù)采集下載時(shí)效率非常高!ubuntu/macos 下,在有完善的python環(huán)境的基礎(chǔ)上直接安裝 scrapywindows下:注意~安裝分兩步進(jìn)行l(wèi)先安裝scrapy# 管理員身份運(yùn)行cmd窗口pip install scrapyoreasy_install scrapyPS:注意安裝完scrapy之后,可以正常的進(jìn)行scrapy項(xiàng)目的開發(fā),但是在windows上運(yùn)行項(xiàng)目會(huì)出現(xiàn)問題,如果出現(xiàn)類似于WinError這樣的的問題,請安裝下面的模塊l安裝win32# 需要安裝一個(gè)pypiwin32模塊,用于scrapy模塊可能調(diào)用win底層C庫進(jìn)行函數(shù)操作pip install pypiwin322.項(xiàng)目開發(fā)——?jiǎng)?chuàng)建scrapy項(xiàng)目通過執(zhí)行如下命令,來創(chuàng)建scrapy項(xiàng)目# 通過scrapy命令,加上startproject選項(xiàng),創(chuàng)建一個(gè)名稱為spider_name的爬蟲項(xiàng)目scrapy startproject在pycharm中直接運(yùn)行工具中的cmd終端窗口,執(zhí)行如下命令創(chuàng)建一個(gè)爬蟲項(xià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)建好的項(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)證、存儲的模塊

|-- middlewares.py 中間件定義的模塊

|-- settings.py 項(xiàng)目設(shè)置模塊

3. 開發(fā)爬蟲程序

準(zhǔn)備工作,分三步進(jì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項(xiàng)目中的items.py模塊定義封裝采集數(shù)據(jù)字段的類型

為了能使用scrapy提供的各種內(nèi)置功能,讓定義的類型繼承自scrapy.Item類型;類型中的字段屬性通過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()

(3) 在spiders/zhilianspider.py中開發(fā)爬蟲程序,采集初步數(shù)據(jù)

為了可以直接使用scrapy內(nèi)置的爬蟲操作,讓scrapy自動(dòng)采集數(shù)據(jù),我們需要定義一個(gè)爬蟲處理類

l 在spiders/zhilianspider.py模塊中定義ZhilianSpider類型

l 繼承自scrapy.Spider

l 類型中的屬性:name屬性~爬蟲名稱,用于在命令行啟動(dòng)爬蟲時(shí)調(diào)用

l 類型中的屬性:start_urls屬性~采集數(shù)據(jù)的初始url地址[列表、元組]

l 類型中的屬性:allowed_domains屬性~采集數(shù)據(jù)的網(wǎng)站域名限制

l 類型中的方法:parse(self, response)采集完數(shù)據(jù)之后自動(dòng)執(zhí)行的函數(shù)

數(shù)據(jù)處理

(4) 核心:在pipelines.py模塊中,定義處理Item數(shù)據(jù)的piplelines,將數(shù)據(jù)存儲到數(shù)據(jù)庫中給其他項(xiàng)目做數(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 擴(kuò)展:了解python操作oracle數(shù)據(jù)庫、mongdb數(shù)據(jù)庫\postgresql數(shù)據(jù)庫的核心操作模塊

l 掌握:sqlalchemy 操作數(shù)據(jù)

n 回顧面向?qū)ο蟮姆庋b

n 爬蟲中數(shù)據(jù)處理的使用——爬蟲程序中使用sqlalchemy操作數(shù)據(jù)

l 擴(kuò)展:pymongo 操作數(shù)據(jù)

l 核心:項(xiàng)目案例~10個(gè)爬蟲程序[10個(gè)不同的類型的網(wǎng)站數(shù)據(jù)]

n 3種不同數(shù)據(jù)的采集(技術(shù)實(shí)現(xiàn))

u 反爬蟲較為復(fù)雜網(wǎng)站的數(shù)據(jù)操作[selenium + phantomjs]

l 新浪微博登錄之后的個(gè)人中心頁面數(shù)據(jù),提取[微博主名稱、發(fā)布的微博,發(fā)布的時(shí)間]

u 智聯(lián)招聘網(wǎng)站數(shù)據(jù)的采集[工作、公司、薪水]->mysql、mongodb

u 段子來了[段子、發(fā)布時(shí)間、發(fā)布人]->mysql、mongodb

n 采集5W條商品數(shù)據(jù)

u 商品圖片、名稱、單價(jià)、描述[、 類型]

u 統(tǒng)計(jì)采集的時(shí)間、數(shù)據(jù)量大小

n 任務(wù):和10班的同學(xué)進(jìn)行溝通,提供爬蟲程序采集適量數(shù)據(jù)

u 1~5個(gè)人一組,負(fù)責(zé)對方一個(gè)項(xiàng)目的數(shù)據(jù)提供

1. orm操作

orm:object relation mapping 對象關(guān)系映射,主要用于將程序中的數(shù)據(jù)和數(shù)據(jù)庫中的記錄進(jìn)行對應(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較為完善的框架,可以直接進(jìn)行數(shù)據(jù)的CRUD

3. sqlalchemy

核心主要針對mysql數(shù)據(jù)庫的一個(gè)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框架默認(rèn)提供了各種篩選方式,通過選擇器Selector進(jìn)行處理,內(nèi)建并且封裝好,可以直接通過response響應(yīng)對象調(diào)用

重點(diǎn)內(nèi)容:爬蟲采集數(shù)據(jù)篩選測試

進(jìn)入命令行,執(zhí)行命令

scrapy shell “url”

執(zhí)行之后進(jìn)入python命令行,此時(shí)~響應(yīng)的數(shù)據(jù)已經(jīng)被包含到response變量中了,可以直接操作response進(jìn)行數(shù)據(jù)篩選測試

scrapy完整的項(xiàng)目流程

l 創(chuàng)建爬蟲項(xiàng)目[可以包含多個(gè)爬蟲程序]

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屬性:爬蟲名稱,用于在命令行啟動(dòng)指定爬蟲使用

n allowed_domains屬性:域名限制~限制爬蟲只能在某個(gè)域名下進(jìn)行數(shù)據(jù)采集

n start_urls屬性:元組/列表,定義了所有初始采集數(shù)據(jù)的url路徑

n parse(self, response)函數(shù):函數(shù)中的response參數(shù)接受了下載模塊采集到的url中的數(shù)據(jù)

u 這個(gè)函數(shù)中,可以進(jìn)行數(shù)據(jù)的xpath/re/css選擇器進(jìn)行篩選

u 將篩選得到的數(shù)據(jù),封裝在ZhilianItem對象中

u 通過協(xié)程的方式將item對象交給pipelines.py模塊進(jìn)行處理

l yield item

l 開發(fā)管道模塊

n 修改myspider/pipelines.py模塊,添加ZhilianPipleline類型

u __init__(self):主要用于進(jìn)行資源的初始化操作,如打開文件、打開和數(shù)據(jù)庫的連接等等,有必要編寫

l 初始化了sqlalchemy的數(shù)據(jù)庫連接

u open_spider(self, spider):當(dāng)spider爬蟲啟動(dòng)的時(shí)候自動(dòng)調(diào)用的函數(shù),也經(jīng)常用于精確的資源初始化工作,一般不寫

u close_spider(self, spider):當(dāng)spider爬蟲關(guān)閉的時(shí)候自動(dòng)調(diào)用的函數(shù),經(jīng)常用于資源的回收,如關(guān)閉打開的文件、關(guān)閉數(shù)據(jù)庫連接等等,有必要編寫

l 關(guān)閉了sqlalchemy的數(shù)據(jù)庫連接

u process_item(self, item, spider):核心處理函數(shù),進(jìn)行采集到的數(shù)據(jù)item中的實(shí)際數(shù)據(jù)的驗(yàn)證、存儲工作,必須寫

l 通過sqlalchemy進(jìn)行了數(shù)據(jù)的存儲

n 修改myspider/settings.py設(shè)置文件,添加ITEM_PIPELINES = []配置選項(xiàng)中,將我們自定義的ZhilianPipeline注冊給scrapy

l 完成!數(shù)據(jù)被正確采集到了數(shù)據(jù)庫中

注意問題:

Python2的編碼問題、數(shù)據(jù)庫交互時(shí)的編碼問題

網(wǎng)頁數(shù)據(jù)分析問題[耗時(shí)耗力,要有耐心]

注意scrapy的編程步驟!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容