Python爬蟲:把爬取到的數(shù)據(jù)插入到execl中

當(dāng)我們爬蟲爬取大量數(shù)據(jù)并且已經(jīng)爬取到了本地愿待,這些數(shù)據(jù)如果不存儲(chǔ)起來,那么就會(huì)變得無效.

那下面讓小編教你把這些數(shù)據(jù)插入Excel中保存下來吧~

我們已經(jīng)把數(shù)據(jù)爬到本地并已經(jīng)插入execl疫剃,上效果圖

操作Execl其實(shí)里面很多東西要去了解,但這里我講常用的讀寫硼讽,滿足我們的一般需求,感興趣的朋友可以自己去深入巢价。

1. 讀execl文件

需要安裝 xlrd庫,老辦法固阁,直接在setting中安裝壤躲,然后導(dǎo)入放可使用python讀取execl

操作這樣的execl列表

# coding=utf-8

importxlrd

data = xlrd.open_workbook('execl_file.xlsx')

table = data.sheets()[0]#通過索引順序獲取table, 一個(gè)execl文件一般都至少有一個(gè)table

printtable.nrows#行數(shù)

printtable.ncols#列數(shù)

forkinrange(table.nrows):#遍歷行數(shù)據(jù)

printtable.row_values(k)

foriinrange(table.ncols):#便利列數(shù)據(jù)

printtable.col_values(i)

printtable.cell(2,2).value#獲取單元格數(shù)據(jù),前一個(gè)是行數(shù)备燃,從0開始碉克,后一個(gè)是列數(shù),且列數(shù)從0開始

forainrange(1,table.nrows):#行數(shù)據(jù)并齐,我正好要去掉第1行標(biāo)題

forbinrange(table.ncols):

printtable.cell(a,b).value

print'----------------------'

得到結(jié)果:

6

4

[u'\u54c1\u724c',u'size',u'\u4ef7\u683c',u'\u6027\u522b']

[u'Nike',90.0,1033.0,u'\u7537']

[u'addida',88.0,444.0,u'\u5973']

[u'zara',87.0,333.0,u'\u7537']

[u'Lining',33.0,22.0,u'\u7537']

[u'kappa',33.0,222.0,u'\u7537']

[u'\u54c1\u724c',u'Nike',u'addida',u'zara',u'Lining',u'kappa']

[u'size',90.0,88.0,87.0,33.0,33.0]

[u'\u4ef7\u683c',1033.0,444.0,333.0,22.0,222.0]

[u'\u6027\u522b',u'\u7537',u'\u5973',u'\u7537',u'\u7537',u'\u7537']

444.0

Nike

90.0

1033.0

----------------------

addida

88.0

444.0

----------------------

zara

87.0

333.0

----------------------

Lining

33.0

22.0

----------------------

kappa

33.0

222.0

----------------------

很簡單沒有什么要解釋的了

2. 復(fù)習(xí)一下range函數(shù)

#>>> range(1,5)#代表從1到5(不包含5)

# [1, 2, 3, 4]

#>>> range(1,5,2)#代表從1到5漏麦,間隔2(不包含5)

# [1, 3]

#>>> range(5)#代表從0到5(不包含5)

# [0, 1, 2, 3, 4]

3. 寫入execl

需要安裝xlwt庫客税,老辦法自己先安裝,不多說了,需要導(dǎo)入xlwt然后放可使用python寫入數(shù)據(jù)

workbook = xlwt.Workbook(encoding='utf-8')#創(chuàng)建workbook 其實(shí)就是execl撕贞,

worksheet = workbook.add_sheet('my_worksheet')#創(chuàng)建表更耻,如果想創(chuàng)建多個(gè),直接在后面再add_sheet

worksheet.write(0,0,label ='Row 0,Column 0 Value')#3個(gè)參數(shù)捏膨,第一個(gè)參數(shù)表示行秧均,從0開始,第二個(gè)參數(shù)表示列從0開始号涯,第三個(gè)參數(shù)表示插入的數(shù)值

workbook.save('execl_liu.xlsx')#寫完記得一定要保存

完整實(shí)例代碼

f = xlwt.Workbook()#創(chuàng)建工作薄

#創(chuàng)建個(gè)人信息表

sheet1 = f.add_sheet(u'個(gè)人信息',cell_overwrite_ok=True)

rowTitle = [u'編號',u'姓名',u'性別',u'年齡']

rowDatas = [[u'張一',u'男',u'18'],[u'李二',u'女',u'20'],[u'黃三',u'男',u'38'],[u'劉四',u'男',u'88']]

foriinrange(0,len(rowTitle)):

sheet1.write(0,i,rowTitle[i],set_style('Times new Roman',220,True)) 后面是設(shè)置樣式

forkinrange(0,len(rowDatas)):#先遍歷外層的集合目胡,即每行數(shù)據(jù)

rowDatas[k].insert(0,k+1)#每一行數(shù)據(jù)插上編號即為每一個(gè)人插上編號

forjinrange(0,len(rowDatas[k])):#再遍歷內(nèi)層集合

sheet1.write(k+1,j,rowDatas[k][j])#寫入數(shù)據(jù),k+1表示先去掉標(biāo)題行,另外每一行數(shù)據(jù)也會(huì)變化,j正好表示第一列數(shù)據(jù)的變化诚隙,rowdatas[k][j] 插入數(shù)據(jù)

#創(chuàng)建個(gè)人收入表

sheet1 = f.add_sheet(u'個(gè)人收入表',cell_overwrite_ok=True)

rowTitle2 = [u'編號',u'姓名',u'學(xué)歷',u'工資']

rowDatas2 = [[u'張一',u'本科',u'8000'],[u'李二',u'碩士',u'10000'],[u'黃三',u'博士',u'20000'],[u'劉四',u'教授',u'50000']]

foriinrange(0,len(rowTitle2)):

sheet1.write(0,i,rowTitle2[i])

forkinrange(0,len(rowDatas2)):#先遍歷外層的集合

rowDatas2[k].insert(0,k+1)#每一行數(shù)據(jù)插上編號即為每一個(gè)人插上編號

forjinrange(0,len(rowDatas2[k])):#再遍歷內(nèi)層集合

sheet1.write(k+1,j,rowDatas2[k][j])#寫入數(shù)據(jù),k+1表示先去掉標(biāo)題行讶隐,另外每一行數(shù)據(jù)也會(huì)變化,j正好表示第一列數(shù)據(jù)的變化,rowdatas[k][j] 插入數(shù)據(jù)

f.save('info.xlsx')

最后得到的效果圖

3. 把爬取的數(shù)據(jù)插入到execl中

這里直接上代碼了久又,相關(guān)的注釋都在代碼里

# coding=utf-8

importrequests

importtime

importxlwt

importxlrd

fromlxmlimportetree

classZbjData(object):

def__init__(self):

self.f = xlwt.Workbook()#創(chuàng)建工作薄

self.sheet1 = self.f.add_sheet(u'任務(wù)列表',cell_overwrite_ok=True)

self.rowsTitle = [u'編號',u'標(biāo)題',u'簡介',u'價(jià)格',u'截止時(shí)間',u'鏈接']

foriinrange(0, len(self.rowsTitle)):

self.sheet1.write(0, i, self.rowsTitle[i], self.set_style('Times new Roman',220,True))

self.f.save('zbj.xlsx')

defset_style(self,name, height, bold=False):

style = xlwt.XFStyle()# 初始化樣式

font = xlwt.Font()# 為樣式創(chuàng)建字體

font.name = name

font.bold = bold

font.colour_index =2

font.height = height

style.font = font

returnstyle

defgetUrl(self):

foriinrange(33):

url ='http://task.zbj.com/t-ppsj/p{}s5.html'.format(i+1)

self.spiderPage(url)

defspiderPage(self,url):

ifurlisNone:

returnNone

try:

data = xlrd.open_workbook('zbj.xlsx')

table = data.sheets()[0]# 通過索引順序獲取table, 一個(gè)execl文件一般都至少有一個(gè)table

rowCount = table.nrows#獲取行數(shù) ? 巫延,下次從這一行開始

proxies = {

'http':'http://221.202.248.52:80',

}

user_agent ='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4295.400'

headers = {'User-Agent': user_agent}

htmlText = requests.get(url, headers=headers,proxies=proxies).text

selector = etree.HTML(htmlText)

tds = selector.xpath('//*[@class="tab-switch tab-progress"]/table/tr')

m =0

fortdintds:

data = []

price = td.xpath('./td/p/em/text()')

href = td.xpath('./td/p/a/@href')

title = td.xpath('./td/p/a/text()')

subTitle = td.xpath('./td/p/text()')

deadline = td.xpath('./td/span/text()')

price = price[0]iflen(price)>0else''# python的三目運(yùn)算 :為真時(shí)的結(jié)果 if 判定條件 else 為假時(shí)的結(jié)果

title = title[0]iflen(title)>0else''

href = href[0]iflen(href)>0else''

subTitle = subTitle[0]iflen(subTitle)>0else''

deadline = deadline[0]iflen(deadline)>0else''

#拼裝成一個(gè)集合

data.append(rowCount+m)#加個(gè)序號

data.append(title)

data.append(subTitle)

data.append(price)

data.append(deadline)

data.append(href)

foriinrange(len(data)):

self.sheet1.write(rowCount+m,i,data[i])#寫入數(shù)據(jù)到execl中

m+=1#記錄行數(shù)增量

printm

printprice, title, href, subTitle, deadline

exceptException,e:

print'出錯(cuò)',e.message

finally:

self.f.save('zbj.xlsx')

if'_main_':

zbj = ZbjData()

zbj.getUrl()

最后的效果圖是:

注意這里爬取數(shù)據(jù)的時(shí)候,有的代理ip還是被禁用了地消,所以獲取數(shù)據(jù)有失敗的情況炉峰,所以這里需要有異常處理..


當(dāng)然數(shù)據(jù)還應(yīng)該存入到數(shù)據(jù)庫中,所以下一篇我們會(huì)來講講如何把數(shù)據(jù)插入到數(shù)據(jù)庫中脉执。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疼阔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子半夷,更是在濱河造成了極大的恐慌婆廊,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巫橄,死亡現(xiàn)場離奇詭異淘邻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)湘换,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門宾舅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彩倚,你說我怎么就攤上這事筹我。” “怎么了帆离?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵蔬蕊,是天一觀的道長。 經(jīng)常有香客問我哥谷,道長袁串,這世上最難降的妖魔是什么概而? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮囱修,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘王悍。我一直安慰自己破镰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布压储。 她就那樣靜靜地躺著鲜漩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪集惋。 梳的紋絲不亂的頭發(fā)上孕似,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音刮刑,去河邊找鬼喉祭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雷绢,可吹牛的內(nèi)容都是我干的泛烙。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼翘紊,長吁一口氣:“原來是場噩夢啊……” “哼蔽氨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帆疟,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤鹉究,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后踪宠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體自赔,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年殴蓬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匿级。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡染厅,死狀恐怖痘绎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肖粮,我是刑警寧澤孤页,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站涩馆,受9級特大地震影響行施,放射性物質(zhì)發(fā)生泄漏允坚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一蛾号、第九天 我趴在偏房一處隱蔽的房頂上張望稠项。 院中可真熱鬧,春花似錦鲜结、人聲如沸展运。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拗胜。三九已至,卻和暖如春怒允,著一層夾襖步出監(jiān)牢的瞬間埂软,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工纫事, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勘畔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓儿礼,卻偏偏與公主長得像咖杂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蚊夫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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