Python 3 爬蟲學習筆記 (三)

這是我自己在學習python 3爬蟲時的小筆記取逾,做備忘用,難免會有一些錯誤和疏漏,望指正~~~
Python 3 爬蟲學習筆記 (一)
Python 3 爬蟲學習筆記 (二)
Python 3 爬蟲學習筆記 (四)
Python 3 爬蟲學習筆記 (五)
Python 3 爬蟲學習筆記 (六)


今天是大年初二先給大家拜個年费坊,大家過年好呀,這次是文件操作和圖片爬取~

四 將爬取的信息存儲到本地

之前我們都是將爬取的數(shù)據(jù)直接打印到了控制臺上缓淹,這樣顯然不利于我們對數(shù)據(jù)的分析利用懦铺,也不利于保存担败,所以現(xiàn)在就來看一下如何將爬取的數(shù)據(jù)存儲到本地硬盤。

1 對.txt文件的操作

讀寫文件是最常見的操作之一霹菊,python3 內置了讀寫文件的函數(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ù)為filemode剧蚣,參數(shù)file為文件的路徑,參數(shù)mode為操作文件的方式(讀/寫)旋廷,函數(shù)的返回值為一個file對象鸠按,如果文件操作出現(xiàn)異常的話,則會拋出 一個OSError

還以簡書首頁文章題目為例饶碘,將爬取到的文章標題存放到一個.txt文件中目尖,具體代碼如下:

# -*- coding:utf-8 -*-

from urllib import request
from bs4 import BeautifulSoup

url = r'http://www.reibang.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盤以只寫的方式打開/創(chuàng)建一個名為 titles 的txt文件
    file = open(r'E:\titles.txt', 'w')
    for title in titles:
    # 將爬去到的文章題目寫入txt中
        file.write(title.string + '\n')
finally:
    if file:
        # 關閉文件(很重要)
        file.close()

open中mode參數(shù)的含義見下表:

符號 含義
'r' 以只讀模式打開文件(默認模式)
'w' 以只寫的方式打開文件,如果文件存在的話會先刪除再重新創(chuàng)建
'x' 以獨占的方式打開文件扎运,如果文件已經(jīng)存在則錯誤
'a' 以寫的形式打開文件瑟曲,若文件已存在,則以追加的方式寫入
'b' 二進制模式
't' 文本模式(默認)
'+' 更新文件(讀/寫)

其中't'為默認模式豪治,'r'相當于'rt',符號可以疊加使用洞拨,像'r+b'

另外,對文件操作一定要注意的一點是:打開的文件一定要關閉负拟,否則會占用相當大的系統(tǒng)資源烦衣,所以對文件的操作最好使用try:...finally:...的形式。但是try:...finally:...的形式會使代碼顯得比較雜亂,所幸python中的with語句可以幫我們自動調用close()而不需要我們寫出來花吟,所以启泣,上面代碼中的try:...finally:...可使用下面的with語句來代替:

with open(r'E:\title.txt', 'w') as file:
    for title in titles:
        file.write(title.string + '\n')

效果是一樣的,建議使用with語句

Paste_Image.png

2 圖片的儲存

有時候我們的爬蟲不一定只是爬取文本數(shù)據(jù)示辈,也會爬取一些圖片,下面就來看怎么將爬取的圖片存到本地磁盤遣蚀。
我們先來選好目標矾麻,知乎話題:女生怎么健身鍛造好身材? (單純因為圖多芭梯,不要多想哦 (# _ # ) )

看下頁面的源代碼险耀,找到話題下圖片鏈接的格式,如圖:

Paste_Image.png

可以看到玖喘,圖片在img標簽中甩牺,且class=origin_image zh-lightbox-thumb,而且鏈接是由.jpg結尾累奈,我們便可以用Beautiful Soup結合正則表達式的方式來提取所有鏈接贬派,如下:

links = soup.find_all('img', "origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$'))

提取出所有鏈接后,使用request.urlretrieve來將所有鏈接保存到本地

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()
.

具體實現(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和正則表達式結合澎媒,提取出所有圖片的鏈接(img標簽中搞乏,class=**,以.jpg結尾的鏈接)
links = soup.find_all('img', "origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$'))
# 設置保存的路徑戒努,否則會保存到程序當前路徑
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())

運行結果

Paste_Image.png

PS:希望大家進行圖片爬取的時候,盡量不要將爬下來圖片作為商用储玫,特別是攝影作品侍筛,都是具有版權的,嗯撒穷。匣椰。。還有就是注意營養(yǎng)哦~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末桥滨,一起剝皮案震驚了整個濱河市窝爪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌齐媒,老刑警劉巖蒲每,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喻括,居然都是意外死亡邀杏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來望蜡,“玉大人唤崭,你說我怎么就攤上這事〔甭桑” “怎么了谢肾?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長小泉。 經(jīng)常有香客問我芦疏,道長,這世上最難降的妖魔是什么微姊? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任酸茴,我火速辦了婚禮,結果婚禮上兢交,老公的妹妹穿的比我還像新娘薪捍。我一直安慰自己,他們只是感情好配喳,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布酪穿。 她就那樣靜靜地躺著,像睡著了一般晴裹。 火紅的嫁衣襯著肌膚如雪昆稿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天息拜,我揣著相機與錄音溉潭,去河邊找鬼。 笑死少欺,一個胖子當著我的面吹牛喳瓣,可吹牛的內容都是我干的。 我是一名探鬼主播赞别,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼畏陕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仿滔?” 一聲冷哼從身側響起惠毁,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崎页,沒想到半個月后鞠绰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡飒焦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年蜈膨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡翁巍,死狀恐怖驴一,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情灶壶,我是刑警寧澤肝断,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站驰凛,受9級特大地震影響孝情,放射性物質發(fā)生泄漏。R本人自食惡果不足惜洒嗤,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魁亦。 院中可真熱鬧渔隶,春花似錦、人聲如沸洁奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽利术。三九已至呈野,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間印叁,已是汗流浹背被冒。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留轮蜕,地道東北人昨悼。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像跃洛,于是被迫代替她去往敵國和親率触。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容