一睹栖、前言
1照宝、相關(guān)介紹:
采用Python 來進(jìn)行爬蟲的主要原因是: Python語言簡潔呻顽,使用方便雹顺,擁有許多方便進(jìn)行爬蟲的庫,如Urllib廊遍。
Python除了爬蟲獲取數(shù)據(jù)外嬉愧,還可以圖像處理,數(shù)據(jù)處理喉前,導(dǎo)出Execl表格等没酣。更多可以看:Python可以用來干嘛?
2卵迂、安裝Python
蘋果系統(tǒng)上一般默認(rèn)都裝有Python編譯器裕便,為Python2.x版本。本文出現(xiàn)的代碼都是以Python2.7版本為準(zhǔn)见咒。
如果需要Python3.x或者在windows上運(yùn)行偿衰,就需要自己去安裝Python,具體見:安裝Python
二、爬蟲
本文中以實(shí)現(xiàn)一個(gè)爬取網(wǎng)頁中的圖片的爬蟲為例子。
預(yù)備知識
Python基礎(chǔ)知識
Python中urllib庫的用法
Python正則表達(dá)式
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俐东、運(yùn)行Python
在終端輸入:
python **.py
如果是Python3.x版本輸入:
python3 **.py
2鸳碧、Python中urllib庫的用法
urlopen 和read
urlopen:通過一個(gè)URL打開一個(gè)網(wǎng)頁。
read:讀取這個(gè)網(wǎng)頁犬性。
#eg
import urllib
url = 'http://www.thejoyrun.com'
page = urllib.urlopen(url)
html = page.read()
print html
獲取網(wǎng)頁的源碼:
本文爬蟲的核心為:通過正則表達(dá)式在源碼中獲取圖片鏈接瞻离。
urlretrieve
urlretrieve:根據(jù)一個(gè)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á)式
用\d
匹配數(shù)字
用.
匹配任意字符
用\s
匹配一個(gè)空格
用*
表示任意個(gè)數(shù)字符
用+
表示至少一個(gè)字符
具體可以看:Python正則表達(dá)式
4乒裆、Python中re庫的用法
split
用正則表達(dá)式進(jìn)行字符串切分套利,獲得一個(gè)list(可變數(shù)組)
#import re
testStr = 'http://www.thejoyrun.com'
print re.split(r'\.',testStr)
match
用正則表達(dá)式進(jìn)行匹配,如果匹配成功鹤耍,返回一個(gè)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) #分割后獲得一個(gè)list (數(shù)組)
imgUrls = [] #一個(gè)空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=
下面是這個(gè)網(wǎng)址打開的網(wǎng)頁的截圖:
![網(wǎng)頁截圖.png](http://upload-images.jianshu.io/upload_images/1819750-5e75cfdb6fd6d640.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面是下載到本地的圖片截圖:
![下載到本地的圖片截圖.png](http://upload-images.jianshu.io/upload_images/1819750-0b046c6fdca2c29c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#爬蟲框架Scrapy :
我們可以通過urllib庫結(jié)合正則制作一些入門級別的爬蟲稿黄,如果需要更強(qiáng)大喊衫、更多功能的爬蟲則需要借助爬蟲框架
```Scrapy``` Python開發(fā)的一個(gè)快速,高層次的屏幕抓取和web抓取框架,用于抓取web站點(diǎn)并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)杆怕,可以應(yīng)用在包括數(shù)據(jù)挖掘族购,信息處理或存儲歷史數(shù)據(jù)等一系列的程序中。
有興趣的同學(xué)可以到[Scrapy](http://doc.scrapy.org/en/latest/)看看
>NOTE:自己實(shí)踐的時(shí)候可以嘗試改一下代碼陵珍,例如把```.jpg```改成```.avi```寝杖。
#技術(shù)無罪,請勿飆車