python入門實踐一:簡單爬蟲

說明:個人練手python用。
操作系統(tǒng):window10 x64
IDE:Pycharm 2017.2.2
Python版本:3.6.2

一、下載單個圖片

# 導入模塊
from urllib import request
# 指定要下載的圖片的地址
url = "http://pic.qiantucdn.com/images/banner/59ad4e6c86b91.jpg"
# 發(fā)送請求
request = request.urlopen(url)
# 獲取返回結果
response = request.read()
# 創(chuàng)建一個圖片文件,名稱和圖片原名稱一致
f = open("C:/python_test/"+url.split("/")[-1],"wb")
# 寫入數(shù)據(jù)
f.write(response)
# 關閉文件
f.close()

其中最后三句代碼也可以簡化如下:

with open("C:/python_test/"+url.split("/")[-1],"wb") as f:
    f.write(response)

使用with關鍵字,就不需要關閉流了。

二、下載整頁圖片

# urllib是庫,request中該庫中的模塊,用于發(fā)送HTTP請求
import urllib.request
# 引入正則表達式模塊
import re
# 網頁地址,里面包含眾多圖片,需要寫正則篩選出來
url = "http://www.58pic.com/piccate/5-145-0.html"
# 發(fā)送請求
req = urllib.request.urlopen(url)
# 接收相應的內容
res = req.read()
# 將相應的內容轉為字符串類型
res = repr(res)
# 正則表達式 前面的一個 r 表示字符串為非轉義的原始字符串,讓編譯器忽略反斜杠,也就是忽略轉義字符
# \S匹配任意非空字符 *表示0-n次
regex = r'http://[\S]*.jpg'
# 將正則表達式編譯為正則表達式對象,用于提高匹配效率
pattern = re.compile(regex)
# 使用編譯好的正則對象調用findall方法,篩選出所有符合正則的數(shù)據(jù),結果為list類型
get_image = pattern.findall(res)
# 定義臨時變量,用于命名下載的圖片
page = 1
for image in get_image:
  # urlretrieve用于將遠程數(shù)據(jù)下載到本地
  urllib.request.urlretrieve(image, "C:/python_test/"+"%s.jpg" % page)
  page += 1

三、顯示下載進度

這里的urlretrieve方法定義如下:

urlretrieve(url, filename=None, reporthook=None, data=None)
  • 1、第一個參數(shù)表示要下載的資源的地址
  • 2、第二個參數(shù)表示保存的路徑及名稱
  • 3、第三個參數(shù)是一個回調函數(shù),當連接上服務器、以及相應的數(shù)據(jù)塊傳輸完畢時會觸發(fā)該回調,我們可以利用這個回調函數(shù)來顯示當前的下載進度。
  • 4、第四個參數(shù)表示post到服務器的數(shù)據(jù)

該方法返回一個包含兩個元素(filename, headers)的元組,filename 表示保存到本地的路徑,header 表示服務器的響應頭對象信息。如下:

('C:/python_test/34.jpg', <http.client.HTTPMessage object at 0x00000261B634AEB8>)

下面我們使用一下該函數(shù),去下載網絡上的一個文件,同時顯示下載進度:

import urllib.request

# 回調函數(shù)定義
def callback(a, b, c):
    '''
    :param a: 已經下載的數(shù)據(jù)塊的個數(shù)  
    :param b: 數(shù)據(jù)塊的大小,值是8192  
    :param c: 遠程文件的大小 
    '''  
    per = 100.0 * a * b / c
    if per > 100:
        per = 100
    print('%.2f%%' % per)

# 指定下載文件的地址
url = "http://sw.bos.baidu.com/sw-search-sp/software/3756358c42c34/npp_7.5.1_Installer.exe"
# 指定存儲的路徑和名稱
filename = "c:/python_test/notepad++.exe"
# 下載
urllib.request.urlretrieve(url, filename, callback)

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

相關閱讀更多精彩內容

  • 聲明:本文講解的實戰(zhàn)內容,均僅用于學習交流,請勿用于任何商業(yè)用途! 一、前言 強烈建議:請在電腦的陪同下,閱讀本文...
    Bruce_Szh閱讀 12,998評論 6 28
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評論 25 709
  • 孩子最近不再對我做的飯菜挑口了,相比之前的不屑,哆嗦,現(xiàn)在只是淡淡地說我吃不完這么多,實在是餓,他會就著醬菜吃兩碗...
    xyldaiqun閱讀 168評論 2 2
  • 你有你的官場,我有我的道場;你有你的盛宴,我有我的細面;你有你的生活,我有我的奔波;你有你的財富,我有我的破屋;你...
    梁噴噴閱讀 353評論 0 0

友情鏈接更多精彩內容