python3爬蟲爬取網頁圖片簡單示例
本人也是剛剛開始學習python的爬蟲技術,然後本來想在網上找點教程來看看,誰知道一搜索,大部分的都是用python2來寫的,新手嘛,一般都喜歡裝新版本。於是我也就寫一個python3簡單的爬蟲,爬蟲一下貼吧的圖片吧。話不多說,我們開始。
首先簡單來說說一下知識。
一、什麼是爬蟲?
網頁上面採集資料
二、學習爬蟲有什麼作用?
做案例分析,做資料分析,分析網頁結構.......
三、爬蟲環境
需求:python3x pycharm
模組:urllib 、urllib2、bs4、re
四、爬蟲思路:
1. 開啟網頁,獲取原始碼。
*由於多人同時爬蟲某個網站時候,會造成資料冗餘,網站崩潰,所以一些網站是禁止爬蟲的,會返回403拒絕訪問的錯誤資訊。----獲取不到想要的內容/請求失敗/IP容易被封……..等
*解決辦法:偽裝——不告訴網站我是一個指令碼,告訴它我是一個瀏覽器。(加上隨便一個瀏覽器的頭部資訊,偽裝成瀏覽器),由於是簡單例子,那我們就不搞這些騷操作了。
2. 獲取圖片
*Find函式 :只去找第一個目標,查詢一次
*Find_all函式: 找到所有的相同的目標。
這裡可能有一個解析器的問題,我們也不說了,出問題的同學百度一堆解決辦法。
3. 儲存圖片地址與下載圖片
*a.使用urlib---urlretrieve下載(儲存位置:如果儲存在跟*.py檔案同一個地方,那麼只需要資料夾名稱即可,如果是其他地方,那麼得寫絕對路徑。)
算了,不說那麼多廢話,既然是個簡單例子,那我就直接貼程式碼吧。相信也沒多少人呢看不懂。
提一句:用BeautifulSoup
就可以不用正則;爬蟲用正則,Bs4, xpath三種 選擇一個就好。當然也可以混合使用,也還有其他種。
爬取地址:http://tieba.baidu.com/p/3840085725
程式碼如下:
import urllib.request import re import os import urllib #根據給定的網址來獲取網頁詳細資訊,得到的html就是網頁的原始碼 def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html.decode('UTF-8') def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) #轉換成一個正則物件 imglist = imgre.findall(html) #表示在整個網頁中過濾出所有圖片的地址,放在imglist中 x = 0 #宣告一個變數賦值 path = 'H:\\python lianxi\\zout_pc5\\test' #設定儲存地址 if not os.path.isdir(path): os.makedirs(path) # 將圖片儲存到H:..\\test資料夾中,如果沒有test資料夾則建立 paths = path+'\\' #儲存在test路徑下 for imgurl in imglist: urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #開啟imglist,下載圖片儲存在本地, #format格式化字串 x = x + 1 print('圖片已開始下載,注意檢視資料夾') return imglist html = getHtml("http://tieba.baidu.com/p/3840085725") #獲取該網址網頁詳細資訊,html就是網頁的原始碼 print (getImg(html)) #從網頁原始碼中分析並下載儲存圖片 |
最後效果如圖:
好了,教程到這裡就結束了,更多精彩,敬請關注:IT民工_柒曉白
參考地址:https://my.oschina.net/zouqxb/blog/1553586
(ps:對於python本人也是新手,文章有任何錯誤請多多包涵)