為了提高教學(xué)的趣味性杨蛋,先不從基本的正則表達(dá)式入手介紹希俩,用到的時候會解釋一下棚贾。
先直接一個圖片抓取的實(shí)例(能快速保存頁面的所有圖片到本地):
讀取網(wǎng)頁源碼和抓取信息用的是urllib庫,正則表達(dá)式用的是re庫(http://blog.csdn.net/twc829/article/details/50377952? ? 這里有正則的詳細(xì)介紹)阅懦。
step1:獲取頁面數(shù)據(jù)
def getHtml(url):
page = urllib.request.Request(url=url)
html=urllib.request.urlopen(page).read()
return html
這是最基本的代碼和二,利用request函數(shù)可以獲取頁面的所有信息,但很多網(wǎng)站都會為了防止被爬取數(shù)據(jù)耳胎,會檢查你的headers惯吕。所以還需要對程序進(jìn)行偽裝一下,加上自定義的headers:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
并將page改成page = urllib.request.Request(url=url, headers=headers)
網(wǎng)站中通常含有中文怕午,還要將編譯方式改成utf-8:
html = html.decode('utf-8')
綜合一下獲取頁面數(shù)據(jù):
def getHtml(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
page = urllib.request.Request(url=url, headers=headers)
html=urllib.request.urlopen(page).read()
html = html.decode('utf-8')
return html
step2:尋找圖片先用正則表達(dá)式確定頁面數(shù)據(jù)中需要的部分:? reg = r'src="(.*\.jpg)"'? ? ? . 是匹配任意字符废登,換行符\n除外? ? ? * 是匹配前一個字符0次或n次,即可以含有n個 .? ? ? ? \.是為了區(qū)分 .? 表示一個真正的符號.? ? ? 所以這條語句實(shí)在確定搜索目標(biāo)是XXXX.jpg
然后把正則表達(dá)式編譯成一個正則表達(dá)式對象:
imgre = re.compile(reg)
再讀取html?中包含?imgre(正則表達(dá)式)的數(shù)據(jù):
imglist = re.findall(imgre,html)
step3:保存圖片
由于圖片比較多郁惜,肯定要用循環(huán)來進(jìn)行保存
x = 0
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'/Users/yangyanxin/Desktop/1/%s.jpg' % x)
x+=1
urlretrieve函數(shù)可以將指定url的文件保存到本地
綜合一下尋找和保存圖片:
def getImg(html):
reg = r'src="(.*\.jpg)"'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x = 0
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'/Users/yangyanxin/Desktop/1/%s.jpg' % x)
x+=1
return imglist
step4:指定網(wǎng)站進(jìn)行爬缺ぞ唷:html=getHtml("http://www.douyu.com")
getImg(html)
運(yùn)行后,斗魚首頁的所有圖片就都在指定文件夾里了
綜合所有代碼:
#-*- coding: UTF-8 -*-
import urllib
import re
from? urllib import request
def getHtml(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
page = urllib.request.Request(url=url, headers=headers)
html=urllib.request.urlopen(page).read()
html = html.decode('utf-8')
return html
def getImg(html):
reg = r'src="(.*\.jpg)"'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x = 0
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'/Users/yangyanxin/Desktop/1/%s.jpg' % x)
x+=1
return imglist
html=getHtml("http://www.douyu.com")
print (getImg(html))