零基礎(chǔ)制作一個Python 爬蟲

一、前言

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)頁的截圖:
![網(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é)合正則制作一些入門級別的爬蟲,如果需要更強大、更多功能的爬蟲則需要借助爬蟲框架

```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ù)無罪,請勿飆車
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容