1. 需求
爬取貼吧的圖片,保存在本地。
2. 實例
使用urllib模塊請求網絡,通過正則匹配圖片網址。
# -*- coding: utf-8 -*-
import re # re模塊主要包含了正則表達式
import urllib.request
from urllib import request # urllib模塊提供了讀取Web頁面數據的接口
# 定義一個getHtml()函數
def getSuperHtmlCode(url):
print('start-getsuperhtml')
with request.urlopen(url) as f:
data = f.read()
print('Status:', f.status, f.reason)
for k, v in f.getheaders():
print('%s: %s' % (k, v))
print('Data:', data.decode('utf-8'))
return data
# 定義一個getHtml函數
def getHtml(url):
print('start-gethtml')
page = urllib.request.urlopen(url) # urllib.request.urlopen()方法用於打開一個URL地址
html = page.read() # read()方法用於讀取URL上的數據
return html
# 圖片下載
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext' # 正則表達式,得到圖片地址
imgre = re.compile(reg) # re.compile() 可以把正則表達式編譯成一個正則表達式對象.
html = html.decode('utf-8') # python3
imglist = re.findall(imgre, html) # re.findall() 方法讀取html 中包含 imgre(正則表達式)的數據
# 把篩選的圖片地址通過for循環遍歷並保存到本地
# 核心是urllib.request.urlretrieve()方法,直接將遠程數據下載到本地,圖片通過x依次遞增命名
x = 0
for imgurl in imglist:
urllib.request.urlretrieve(imgurl, 'G:\download\%s.jpg' % x)
x += 1
if __name__ == '__main__':
html = getSuperHtmlCode("https://tieba.baidu.com/p/2555125530")
print('html:', html)
print(getImg(html))
運行結果: