天天看點

python用urllib爬取百度爬取線上網站

1、首先調用urllib2庫的URLopen的方法,傳入一個URL,urlopen一般接受三個參數,它的參數如下

#coding=utf-8  
import os  
import urllib  
import httplib2  
import webbrowser as web  

#爬取線上網站  
url = "http://www.baidu.com/"    
content = urllib.urlopen(url).read()    
open("baidu.html","w").write(content)  
#浏覽求打開網站  
web.open_new_tab("baidu.html")    
           

2、第一個參數url即為URL,第二個參數data是通路URL時要傳送的資料,第三個timeout是設定逾時時間。

第二三個參數是可以不傳送的,data預設為空None,timeout預設為 socket._GLOBAL_DEFAULT_TIMEOUT。

第一個參數URL是必須要傳送的,在這個例子裡面我們傳送了百度的URL,執行urlopen方法之後,傳回一個response對象,傳回資訊便儲存在這裡面。

response = urllib2.urlopen("http://www.baidu.com") print response.read()

3、 *然後是需要下載下傳圖檔,這裡需要學會找到圖檔的URL,如下圖百度的LOGO,可以通過浏覽器右鍵”審查元素”或”檢查”來進行定位

python用urllib爬取百度爬取線上網站

定位URL後,再通過函數urlretrieve()進 #coding = utf-8

import os

import urllib

import httplib2

import webbrowser as web

爬取線上網站

url = “http://www.baidu.com/”

content = urllib.urlopen(url).read()

open(“baidu.html”,”w”).write(content)

#浏覽求打開網站

web.open_new_tab(“baidu.html”)

#下載下傳圖檔 審查元素

pic_url = “https://www.baidu.com/img/bd_logo1.png”

pic_name = os.path.basename(pic_url) #删除路徑擷取圖檔名字

urllib.urlretrieve(pic_url, pic_name)

#本地檔案

content = urllib.urlopen(“first.html”).read()

print content

#下載下傳圖檔 審查元素

pic_url = “imgs/bga1.jpg”

pic_name = os.path.basename(pic_url) #删除路徑擷取圖檔名字

urllib.urlretrieve(pic_url, pic_name) **重點知識:

urllib.urlopen(url[, data[, proxies]]) :建立一個表示遠端url的類檔案對象,然後像本地檔案一樣操作這個類檔案對象來擷取遠端資料。
    urlretrieve方法直接将遠端資料下載下傳到本地。
    如果需要顯示進度條,則使用下面這段代碼:**
           

urllib.urlopen(url[, data[, proxies]]) :建立一個表示遠端url的類檔案對象,然後像本地檔案一樣操作這個類檔案對象來擷取遠端資料。

urlretrieve方法直接将遠端資料下載下傳到本地。

如果需要顯示進度條,則使用下面這段代碼:

import urllib  
def callbackfunc(blocknum, blocksize, totalsize):  
    '''''回調函數 
    @blocknum: 已經下載下傳的資料塊 
    @blocksize: 資料塊的大小 
    @totalsize: 遠端檔案的大小 
    '''  
    percent =  * blocknum * blocksize / totalsize  
    if percent > :  
        percent =   
    print "%.2f%%"% percent  
url = 'http://www.sina.com.cn'  
local = 'd:\\sina.html'  
urllib.urlretrieve(url, local, callbackfunc)  
           

繼續閱讀