首頁  >  文章  >  後端開發  >  python實作簡單爬蟲功能的範例

python實作簡單爬蟲功能的範例

WBOY
WBOY原創
2016-12-05 13:27:121741瀏覽

在我們日常上網瀏覽網頁的時候,常常會看到一些好看的圖片,我們就希望把這些圖片保存下載,或者用戶用來做桌面壁紙,或者用來做設計的素材。

我們最常規的做法就是透過滑鼠右鍵,選擇另存為。但有些圖片滑鼠右鍵的時候並沒有另存為選項,還有辦法就透過就是透過截圖工具截取下來,但這樣就降低圖片的清晰度。好吧~!其實你很厲害的,右鍵查看頁面原始碼。

我們可以透過python 來實現這樣一個簡單的爬蟲功能,把我們想要的程式碼爬取到本地。下面就來看看如何使用python來實現這樣一個功能。

一,取得整個頁面資料

首先我們可以先取得要下載圖片的整個頁面資訊。
getjpg.py

#coding=utf-8
import urllib
def getHtml(url):
  page = urllib.urlopen(url)
  html = page.read()
  return html

html = getHtml("http://tieba.baidu.com/p/2738151262")
print html

Urllib 模組提供了讀取web頁面資料的接口,我們可以像讀取本機檔案一樣讀取www和ftp上的資料。首先,我們定義了一個getHtml()函數:

urllib.urlopen()方法用來開啟一個URL位址。

read()方法用來讀取URL上的數據,向getHtml()函數傳遞一個網址,並把整個頁面下載下來。執行程式就會把整個網頁列印輸出。

二,篩選頁中想要的資料
Python 提供了非常強大的正規表示式,我們需要先了解一點python 正規表示式的知識才行.

假如我們百度貼吧找到了幾張漂亮的壁紙,透過到前段查看工具。找到了圖片的位址,如:src=”http://imgsrc.baidu.com/forum......jpg”pic_ext=”jpeg”

修改程式碼如下:

import re
import urllib

def getHtml(url):
  page = urllib.urlopen(url)
  html = page.read()
  return html

def getImg(html):
  reg = r'src="(.+?\.jpg)" pic_ext'
  imgre = re.compile(reg)
  imglist = re.findall(imgre,html)
  return imglist   
  
html = getHtml("http://tieba.baidu.com/p/2460150866")
print getImg(html)

我們又創建了getImg()函數,用於在獲取的整個頁面中篩選所需的圖片連接。 re模組主要包含了正規表示式:

re.compile() 可以把正規表示式編譯成一個正規表示式物件.

re.findall() 方法讀取html 中包含 imgre(正規表示式)的資料。

運行腳本將會得到整個頁面中包含圖片的URL位址。

三,將頁面篩選的資料儲存到本地

把篩選的圖片位址透過for循環遍歷並儲存到本地,程式碼如下:

#coding=utf-8
import urllib
import re

def getHtml(url):
  page = urllib.urlopen(url)
  html = page.read()
  return html

def getImg(html):
  reg = r'src="(.+?\.jpg)" pic_ext'
  imgre = re.compile(reg)
  imglist = re.findall(imgre,html)
  x = 0
  for imgurl in imglist:
    urllib.urlretrieve(imgurl,'%s.jpg' % x)
    x+=1


html = getHtml("http://tieba.baidu.com/p/2460150866")

print getImg(html)

這裡的核心是用到了urllib.urlretrieve()方法,直接將遠端資料下載到本地。

透過一個for迴圈對所獲取的圖片連線進行遍歷,為了讓圖片的檔名看起來更規範,對其進行重命名,命名規則透過x變數加1。儲存的位置預設為程式的存放目錄。

程式運行完成,將在目錄下看到下載到本地的檔案。

感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn