一、前言
1、相關(guān)介紹:
采用Python 來進行爬蟲的主要原因是: Python語言簡潔,使用方便,擁有許多方便進行爬蟲的庫,如Urllib。
Python除了爬蟲獲取數(shù)據(jù)外,還可以圖像處理,數(shù)據(jù)處理,導(dǎo)出Execl表格等。更多可以看:Python可以用來干嘛?
2、安裝Python
蘋果系統(tǒng)上一般默認都裝有Python編譯器,為Python2.x版本。本文出現(xiàn)的代碼都是以Python2.7版本為準。
如果需要Python3.x或者在windows上運行,就需要自己去安裝Python,具體見:安裝Python
二、爬蟲
本文中以實現(xiàn)一個爬取網(wǎng)頁中的圖片的爬蟲為例子。
預(yù)備知識
Python基礎(chǔ)知識
Python中urllib庫的用法
Python正則表達式
Python中re庫的用法
1、Python基礎(chǔ)知識
1、Python腳本文件后綴名為.py
2、#為注釋符號
3、Python中沒有花括號{},用:代替
#eg:
for url in urls :
print url
4、函數(shù)的調(diào)用寫法與JS相似
#eg
func(參數(shù))
5、運行Python
在終端輸入:
python **.py
如果是Python3.x版本輸入:
python3 **.py
2、Python中urllib庫的用法
urlopen 和read
urlopen:通過一個URL打開一個網(wǎng)頁。
read:讀取這個網(wǎng)頁。
#eg
import urllib
url = 'http://www.thejoyrun.com'
page = urllib.urlopen(url)
html = page.read()
print html
獲取網(wǎng)頁的源碼:

源碼截圖.png
本文爬蟲的核心為:通過正則表達式在源碼中獲取圖片鏈接。
urlretrieve
urlretrieve:根據(jù)一個URL,下載相關(guān)文件
#eg
import urllib
urllib.urlretrieve('http://img.mm522.net/flashAll/20120502/1335945502hrbQTb.jpg','%s %s.jpg' % (datetime.datetime.now(),x)) #(URL,文件保存名字)
3、Python正則表達式
用\d匹配數(shù)字
用.匹配任意字符
用\s匹配一個空格
用*表示任意個數(shù)字符
用+表示至少一個字符
具體可以看:Python正則表達式
4、Python中re庫的用法
split
用正則表達式進行字符串切分,獲得一個list(可變數(shù)組)
#import re
testStr = 'http://www.thejoyrun.com'
print re.split(r'\.',testStr)
match
用正則表達式進行匹配,如果匹配成功,返回一個Match
對象,否則返回None
#import re
testStr = 'http://www.thejoyrun.com'
if re.match(r'http.*com', test):
print 'ok'
else:
print 'failed'
完整代碼
#coding=utf-8
import urllib
import re
import datetime
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
# splitReg = r'[\s\"\,\,\']+'
splitReg = r'[\s\"]+' #不區(qū)分,
tempList = re.split(splitReg,html) #分割后獲得一個list (數(shù)組)
imgUrls = [] #一個空list
x = 0
for str in tempList :
matchReg = r'http:.*.jpg'
if re.match(matchReg,str) :
print '%s--' %x +str
imgUrls.append(str)
x = x + 1
urllib.urlretrieve(str,'%s %s.jpg' % (datetime.datetime.now(),x))
matchReg1 = r'http:.*.png'
if re.match(matchReg1,str) :
print '%s--' %x +str
imgUrls.append(str)
x = x + 1
urllib.urlretrieve(str,'%s %s.jpg' % (datetime.datetime.now().date(),x))
return imgUrls
html = getHtml("網(wǎng)址")
print(html)
getImg(html)```
我們用一下網(wǎng)址測試:
http://cn.bing.com/images/search?q=%E6%85%B5%E6%87%92%E5%B0%91%E5%A5%B3%E5%86%99%E7%9C%9F&FORM=ISTRTH&id=A87C17F9A484F4078C72BEB0FE1EC509BA1F59C8&cat=%E7%BE%8E%E5%A5%B3&lpversion=
下面是這個網(wǎng)址打開的網(wǎng)頁的截圖:

下面是下載到本地的圖片截圖:

#爬蟲框架Scrapy :
我們可以通過urllib庫結(jié)合正則制作一些入門級別的爬蟲,如果需要更強大、更多功能的爬蟲則需要借助爬蟲框架
```Scrapy``` Python開發(fā)的一個快速,高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù),可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲歷史數(shù)據(jù)等一系列的程序中。
有興趣的同學(xué)可以到[Scrapy](http://doc.scrapy.org/en/latest/)看看
>NOTE:自己實踐的時候可以嘗試改一下代碼,例如把```.jpg```改成```.avi```。
#技術(shù)無罪,請勿飆車