1. 程式人生 > >爬取百度貼吧圖片

爬取百度貼吧圖片

本次文章內容是爬取貼吧圖片,希望對大家有所幫助

使用環境:我用的是python2.7.9
在Python 3以後的版本中,urllib2這個模組已經不單獨存在(也就是說當你import urllib2時,系統提示你沒這個模組),urllib2被合併到了urllib中。

  • urllib2.urlopen()變成了urllib.request.urlopen()
  • urllib2.Request()變成了urllib.request.Request()

如果有的用的是python3以後的版本,記得改一下哦

一、 獲取要爬取的貼吧的網址

開啟瀏覽器,找到我們想爬取的貼吧,獲取其網址
在這裡插入圖片描述

二、 獲取頁面原始碼

利用下面函式來獲取原始碼

def gethtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

三、匹配的圖片地址

首先,我們開啟第一步的網址,右擊審查元素,在審查元素中找到圖片的地址,觀察其地址的格式
在這裡插入圖片描述

這裡,我匹配的是bpic等於的那個網址,從這我們可以看到圖片的地址是以.jpg結尾,利用正則進行匹配

  reg = r'bpic="(.*?\.jpg).*?pic'

這裡括號所括住的部分,正是我們所需要的地址

  • (.*?)是進行最小匹配,是非貪婪模式
  • \ 是轉義字元

四、儲存圖片至本地

存入本地

urllib.urlretrieve(imgurl, '%s.jpg' % x)

或者可以存至自己新建的資料夾

f = open('tupian/'+str(x)+'.jpg', 'wb')
f.write((urllib2.urlopen(imgurl)).read())
f.close()

五、完整程式碼呈現

程式碼中有中文時,完整新增的是 # - * - coding:utf-8 - * -

#coding:utf8只是簡寫

此程式中,共用到三個庫:

  • import re
  • import urllib
  • import urllib2
#程式碼中有中文時,需加#coding:utf8
# coding:utf8

#匯入需要的模組,這裡需要re模組匹配正則,urllib模組獲取網頁原始碼,urllib2模組將獲取的圖片存入資料夾中
import re
import urllib
import urllib2

#獲取網頁原始碼的函式
def gethtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

#獲取圖片的函式
def getimg(html):
    #利用正則獲取圖片的網址
    reg = r'bpic="(.*?\.jpg).*?pic'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    #此變數x用於下載圖片時為圖片命名
    x=0
    for imgurl in imglist:
        #這個print可以用於檢驗匹配出的圖片地址
        print imgurl
        #第一種:下載圖片,儲存到本地
        #urllib.urlretrieve(imgurl, '%s.jpg' % x)
        #第二種:將下載好的檔案存入一個資料夾中.(wb存入時會刪除此資料夾原有的圖片)
        f = open('tupian/'+str(x)+'.jpg', 'wb')
        f.write((urllib2.urlopen(imgurl)).read())
        f.close()
        x+=1
html = gethtml("http://tieba.baidu.com/f?ie=utf-8&kw=風景")
getimg(html)

結果呈現
在這裡插入圖片描述


以上就是爬取貼吧圖片的全部過程