- 沒(méi)有金剛鉆別攬瓷器活,當(dāng)我們?cè)谏疃扰廊r(shí)和海量數(shù)據(jù)采集時(shí),就需要一把利器幫助我們來(lái)完成,這時(shí)的scrapy就閃亮登場(chǎng)了?。?!
- 開(kāi)始接觸一個(gè)新的東西我們一般會(huì)從who? what?where?how?來(lái)解析它——廢話有點(diǎn)多啊,還是開(kāi)始吧!
一:scrapy概述
- 用python開(kāi)發(fā)的主要進(jìn)行數(shù)據(jù)采集的一個(gè)應(yīng)用程序框架,底層使用了twisted異步模塊,實(shí)現(xiàn)了快速,高層次采集數(shù)據(jù)
二:安裝
- windows環(huán)境下安裝(需要兩步完成)
首先安裝scrapy
pip install scrapy
easy_install scrapy
然后安裝win32
pip install pypiwin32
ps:為什么要安裝win32?
因?yàn)榘惭b了scrapy之后,在Windows可以正常的項(xiàng)目開(kāi)發(fā),但是運(yùn)行項(xiàng)目會(huì)出現(xiàn)報(bào)錯(cuò)類(lèi)似于winerror這樣的問(wèn)題,安裝了pypiwin32模塊,可以是scrapy模塊調(diào)用win底層C庫(kù)進(jìn)行函數(shù)操作
三:scrapy項(xiàng)目開(kāi)發(fā)
1.創(chuàng)建項(xiàng)目:通過(guò)命令來(lái)完成
scrapy startproject +項(xiàng)目名稱(chēng)
如:創(chuàng)建一個(gè)myspider項(xiàng)目,創(chuàng)建成功后會(huì)出現(xiàn)如下的項(xiàng)目結(jié)構(gòu)
image.png
|--myspider/ 項(xiàng)目根目錄
|--scrapy.cfg項(xiàng)目配置文件
|--myspider/ 爬蟲(chóng)程序開(kāi)發(fā)模塊
|--spiders/爬蟲(chóng)程序所在的目錄
|---demo
|--items.py采集的數(shù)據(jù),定義封裝模型類(lèi)
|--pipelines.py采集完成后對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證和存儲(chǔ)模塊
|--middlewares.py中間件定義模塊
|--setting.py項(xiàng)目設(shè)置模塊
2.在spiders文件下開(kāi)始爬蟲(chóng)程序的開(kāi)發(fā)
1.分析要爬取的url地址
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=6',
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=7',
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=8',
ps:采集網(wǎng)站上的三頁(yè)數(shù)據(jù),分析自己想要采集的數(shù)據(jù),并自定義字段名稱(chēng)
職位:job
公司:company
薪水:salary
2.將自定義的字段封裝在items.py模塊中,創(chuàng)建item類(lèi)
import scrapy
#定義一個(gè)類(lèi)
class ZhaopinItem(scrapy.Item)
#定義屬性字段
job = scrapy.Field()
company = scrapy.Field()
salary = scrapy.Field()
3.在spiders文件下創(chuàng)建爬蟲(chóng)程序
import scrapy
from .. import items
class ZhiLian(scrapy.Spider):
#定義爬蟲(chóng)的名稱(chēng),用于在命令中調(diào)用
name = 'zl'
#定義域名限制,只能爬取xxx域名下的數(shù)據(jù)
allowed_domains = ['zhaopin.com']
#定義url地址
start_urls =(
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=6',
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=7',
'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=%E7%88%AC%E8%99%AB&sm=0&p=8',
)
def parse(self, response):
'''
采集到數(shù)據(jù)后,自動(dòng)執(zhí)行的函數(shù),主要進(jìn)行如下功能
數(shù)據(jù)篩選——》封裝Item對(duì)象——》傳遞數(shù)據(jù)給Pipelines
采集到的數(shù)據(jù)封裝在response
'''
#將數(shù)據(jù)保存到文件中
filename = response.url.split('&')[-1] + '.html'
with open(filename, 'w') as f:
#爬蟲(chóng)采集到的數(shù)據(jù),會(huì)封裝在response.body屬性中,可以直接獲取
f.write(response.body)
4.數(shù)據(jù)處理
在pipelines.py模塊中定義處理Item數(shù)據(jù)的pipelines,將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中(后續(xù)操作)
3.運(yùn)行項(xiàng)目程序
在命令行里切換到項(xiàng)目根目錄文件路徑下,然后在命令行里運(yùn)行:
scrapy crawl + name 定義爬蟲(chóng)的名稱(chēng)
如:scrapy crawl zl 這樣項(xiàng)目就啟動(dòng)了
看到這里應(yīng)該對(duì)scrapy框架的應(yīng)用有了初步的了解,欲知后事且看下回分解.....
