Python3爬蟲學(xué)習(xí)之將爬取的信息保存到本地的方法詳解
本文實(shí)例講述了Python3爬蟲學(xué)習(xí)之將爬取的信息保存到本地的方法。分享給大家供大家參考,具體如下:
將爬取的信息存儲(chǔ)到本地
之前我們都是將爬取的數(shù)據(jù)直接打印到了控制臺(tái)上,這樣顯然不利于我們對(duì)數(shù)據(jù)的分析利用,也不利于保存,所以現(xiàn)在就來(lái)看一下如何將爬取的數(shù)據(jù)存儲(chǔ)到本地硬盤。
1 對(duì).txt文件的操作
讀寫文件是最常見(jiàn)的操作之一,python3 內(nèi)置了讀寫文件的函數(shù):open
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None))
Open file and return a corresponding file object. If the file cannot be opened, an OSError
is raised.
其中比較常用的參數(shù)為file和mode,參數(shù)file為文件的路徑,參數(shù)mode為操作文件的方式(讀/寫),函數(shù)的返回值為一個(gè)file對(duì)象,如果文件操作出現(xiàn)異常的話,則會(huì)拋出 一個(gè)OSError
還以簡(jiǎn)書首頁(yè)文章題目為例,將爬取到的文章標(biāo)題存放到一個(gè).txt文件中,具體代碼如下:
# -*- coding:utf-8 -*- from urllib import request from bs4 import BeautifulSoup url = r'http://www.jianshu.com' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} page = request.Request(url, headers=headers) page_info = request.urlopen(page).read().decode('utf-8') soup = BeautifulSoup(page_info, 'html.parser') titles = soup.find_all('a', 'title') try: # 在E盤以只寫的方式打開(kāi)/創(chuàng)建一個(gè)名為 titles 的txt文件 file = open(r'E:\titles.txt', 'w') for title in titles: # 將爬去到的文章題目寫入txt中 file.write(title.string + '\n') finally: if file: # 關(guān)閉文件(很重要) file.close()
open中mode參數(shù)的含義見(jiàn)下表:
符號(hào) | 含義 |
---|---|
r' | 以只讀模式打開(kāi)文件(默認(rèn)模式) |
w' | 以只寫的方式打開(kāi)文件,如果文件存在的話會(huì)先刪除再重新創(chuàng)建 |
x' | 以獨(dú)占的方式打開(kāi)文件,如果文件已經(jīng)存在則錯(cuò)誤 |
a' | 以寫的形式打開(kāi)文件,若文件已存在,則以追加的方式寫入 |
b' | 二進(jìn)制模式 |
t' | 文本模式(默認(rèn)) |
+' | 更新文件(讀/寫) |
其中't'為默認(rèn)模式,'r'相當(dāng)于'rt',符號(hào)可以疊加使用,像'r+b'
另外,對(duì)文件操作一定要注意的一點(diǎn)是:打開(kāi)的文件一定要關(guān)閉,否則會(huì)占用相當(dāng)大的系統(tǒng)資源,所以對(duì)文件的操作最好使用try:...finally:...的形式。但是try:...finally:...的形式會(huì)使代碼顯得比較雜亂,所幸python中的with語(yǔ)句可以幫我們自動(dòng)調(diào)用close()而不需要我們寫出來(lái),所以,上面代碼中的try:...finally:...可使用下面的with語(yǔ)句來(lái)代替:
with open(r'E:\title.txt', 'w') as file: for title in titles: file.write(title.string + '\n')
效果是一樣的,建議使用with
語(yǔ)句
2 圖片的儲(chǔ)存
有時(shí)候我們的爬蟲不一定只是爬取文本數(shù)據(jù),也會(huì)爬取一些圖片,下面就來(lái)看怎么將爬取的圖片存到本地磁盤。
我們先來(lái)選好目標(biāo),知乎話題:女生怎么健身鍛造好身材? (單純因?yàn)閳D多,不要多想哦 (# _ # ) )
看下頁(yè)面的源代碼,找到話題下圖片鏈接的格式,如圖:
可以看到,圖片在img標(biāo)簽中,且class=origin_image zh-lightbox-thumb
,而且鏈接是由.jpg結(jié)尾,我們便可以用Beautiful Soup結(jié)合正則表達(dá)式的方式來(lái)提取所有鏈接,如下:
links = soup.find_all('img', "origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$'))
提取出所有鏈接后,使用request.urlretrieve來(lái)將所有鏈接保存到本地
Copy a network object denoted by a URL to a local file. If the URL points to a local file, the object will not be copied unless filename is supplied. Return a tuple (filename, headers)
where filename is the local file name under which the object can be found, and headers is whatever the info()
method of the object returned by urlopen()
returned (for a remote object). Exceptions are the same as for urlopen()
.
具體實(shí)現(xiàn)代碼如下:
# -*- coding:utf-8 -*- import time from urllib import request from bs4 import BeautifulSoup import re url = r'https://www.zhihu.com/question/22918070' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} page = request.Request(url, headers=headers) page_info = request.urlopen(page).read().decode('utf-8') soup = BeautifulSoup(page_info, 'html.parser') # Beautiful Soup和正則表達(dá)式結(jié)合,提取出所有圖片的鏈接(img標(biāo)簽中,class=**,以.jpg結(jié)尾的鏈接) links = soup.find_all('img', "origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$')) # 設(shè)置保存的路徑,否則會(huì)保存到程序當(dāng)前路徑 local_path = r'E:\Pic' for link in links: print(link.attrs['src']) # 保存鏈接并命名,time防止命名沖突 request.urlretrieve(link.attrs['src'], local_path+r'\%s.jpg' % time.time())
運(yùn)行結(jié)果
PS:希望大家進(jìn)行圖片爬取的時(shí)候,盡量不要將爬下來(lái)圖片作為商用,特別是攝影作品,都是具有版權(quán)的,嗯。。。還有就是注意營(yíng)養(yǎng)哦~~~
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python實(shí)現(xiàn)MySQL指定表增量同步數(shù)據(jù)到clickhouse的腳本
這篇文章主要介紹了python實(shí)現(xiàn)MySQL指定表增量同步數(shù)據(jù)到clickhouse的腳本,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02python實(shí)現(xiàn)從wind導(dǎo)入數(shù)據(jù)
今天小編就為大家分享一篇python實(shí)現(xiàn)從wind導(dǎo)入數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12Python編寫通訊錄通過(guò)數(shù)據(jù)庫(kù)存儲(chǔ)實(shí)現(xiàn)模糊查詢功能
數(shù)據(jù)庫(kù)存儲(chǔ)通訊錄,要求按姓名/電話號(hào)碼查詢,查詢條件只有一個(gè)輸入入口,自動(dòng)識(shí)別輸入的是姓名還是號(hào)碼,允許模糊查詢。這篇文章主要介紹了Python編寫通訊錄,支持模糊查詢,利用數(shù)據(jù)庫(kù)存儲(chǔ),需要的朋友可以參考下2019-07-07Python正則表達(dá)式常用函數(shù)總結(jié)
這篇文章主要介紹了Python正則表達(dá)式常用函數(shù),結(jié)合實(shí)例形式總結(jié)分析了Python正則表達(dá)式常用函數(shù)功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-06-06Python3導(dǎo)入CSV文件的實(shí)例(跟Python2有些許的不同)
今天小編就為大家分享一篇Python3導(dǎo)入CSV文件的實(shí)例(跟Python2有些許的不同),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06PyQt5+Caffe+Opencv搭建人臉識(shí)別登錄界面
這篇文章主要為大家詳細(xì)介紹了PyQt5+Caffe+Opencv搭建人臉識(shí)別登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08