亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python批量下載圖片的三種方法

 更新時間:2013年04月22日 15:36:21   作者:  
用python批量下載一個網(wǎng)頁中的圖片,需要用到擴展庫來解析html代碼

有三種方法,一是用微軟提供的擴展庫win32com來操作IE,二是用selenium的webdriver,三是用python自帶的HTMLParser解析。win32com可以獲得類似js里面的document對象,但貌似是只讀的(文檔都沒找到)。selenium則提供了Chrome,IE,F(xiàn)ireFox等的支持,每種瀏覽器都有execute_script和find_element_by_xx方法,可以方便的執(zhí)行js腳本(包括修改元素)和讀取html里面的元素。不足是selenium只提供對python2.6和2.7的支持。HTMLParser則是需要自己寫個類繼承基類,重寫解析元素的方法。個人感覺selenium用起來更方便,很容易操作html里的元素。
代碼如下:

win32com:

復(fù)制代碼 代碼如下:

#將滾動條滑到底,最多滑動20000像素
#模擬鍵盤右鍵,查看多張圖片
import sys
import win32com.client,win32api
import urllib.request
import time
import os

def main():
    #獲取參數(shù)
    url=sys.argv[1]
    #操作IE
    ie=win32com.client.Dispatch("InternetExplorer.Application")
    ie.Navigate(url)
    ie.Visible=True
    last_url=''
    dir_name=''
    while last_url!=url:
        print('\nThe URL is:',url,'\n')
        while ie.ReadyState != 4:   
            time.sleep(1)
        while ie.Document.readyState != "complete":
            time.sleep(1)
        #滑動滾動條
        win=ie.Document.parentWindow
        lastY=-1;
        for i in range(40):
            win.scrollTo(0,500*i)
            nowY=win.pageYOffset
            if(nowY==lastY):
                break
            lastY=nowY
            time.sleep(0.4)
        print('Document load state:',ie.Document.readyState)
        doc=ie.Document
        #第一次需要創(chuàng)建目錄
        if(dir_name==''):
            root_dir='E:\\img'
            dir_name=root_dir+'\\'+doc.title
            dir_name=dir_name.replace('|','-')
            if(os.path.exists(root_dir)!=True):
                os.mkdir(root_dir)
            if(os.path.exists(dir_name)!=True):
                os.mkdir(dir_name)
        all_image=doc.images
        print('共有',all_image.length,'張圖片')
        count=0;
        for img in all_image:
            if(img.id=='b_img'):
                count=count+1
                print(count,img.src)
                time.sleep(1)
                img_file=urllib.request.urlopen(img.src)
                byte=img_file.read()
                print(count,'donwload complete!','-'*10,'size:','{:.3}'.format(byte.__len__()/1024),'KB')
                if(byte.__len__()>7000):
                    file_name=img.src.replace('/','_')
                    file_name=file_name.replace(':','_')
                    end=file_name.__len__()
                    if(file_name.rfind('!')!=-1):
                        end=file_name.rfind('!')
                    if(file_name.rfind('?')!=-1):
                        end=file_name.rfind('?')
                    file_name=file_name[:end]
                    write_file=open(dir_name+'\\'+file_name,'wb')
                    write_file.write(byte)
                    write_file.close()
                    print(count,file_name,'complete!')
        #下一張
        last_url=url
        win32api.keybd_event(39,0)
        time.sleep(1)
        url=ie.Document.url
        print(last_url,url)
    #ie.Quit()
if __name__ == '__main__':
    main()

selenium:

復(fù)制代碼 代碼如下:

# -*- coding: cp936 -*-
import sys
import urllib
import time
import os
from selenium import webdriver

def main():
    #獲取參數(shù)
    url=sys.argv[1]
    #操作IE
    driver=webdriver.Chrome()
    driver.get(url)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    #創(chuàng)建目錄
    dir_name=driver.find_element_by_tag_name('title').text
    print dir_name
    root_dir='E:\\img'
    dir_name=root_dir+'\\'+dir_name
    dir_name=dir_name.replace('|','-')
    if(os.path.exists(root_dir)!=True):
        os.mkdir(root_dir)
    if(os.path.exists(dir_name)!=True):
        os.mkdir(dir_name)
    images=driver.find_elements_by_tag_name('img')
    count=0
    for image in images:
        count=count+1
        image_url=str(image.get_attribute('src'))
        img_file=urllib.urlopen(image_url)
        byte=img_file.read()
        print count,'donwload complete!','-'*10,'size:',byte.__len__()/1024,'KB'
        if(byte.__len__()>7000):
            file_name=image_url.replace('/','_')
            file_name=file_name.replace(':','_')
            end=file_name.__len__()
            if(file_name.rfind('!')!=-1):
                end=file_name.rfind('!')
            if(file_name.rfind('?')!=-1):
                end=file_name.rfind('?')
            file_name=file_name[:end]
            write_file=open(dir_name+'\\'+file_name,'wb')
            write_file.write(byte)
            write_file.close()
            print count,file_name,'complete!'

    driver.quit()
if __name__ == '__main__':
    main()

HTMLParser:

復(fù)制代碼 代碼如下:

# import modules used here -- sys is a very standard one
import sys
import urllib.request
# Gather our code in a main() function

from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
    def handle_starttag(self,tag,attrs):
        if(tag=='img'):
            for attr in attrs:
                if(attr[0]=='src'):
                    img_file=urllib.request.urlopen(attr[1])
                    byte=img_file.read()
                    #文件大于1000b則生成文件,添加計數(shù),下載多少圖片,顯示html代碼
                    if(byte.__len__()>1000):
                        file_name=attr[1].replace('/','_')
                        file_name=file_name.replace(':','_')
                        end=file_name.__len__()
                        if(file_name.rfind('!')!=-1):
                            end=file_name.rfind('!')
                        if(file_name.rfind('?')!=-1):
                            end=file_name.rfind('?')
                        file_name=file_name[:end]
##                        print(file_name)
                        write_file=open('E:\\img\\'+file_name,'wb')
                        write_file.write(byte)
                        write_file.close()

def main():
    #獲取參數(shù)
    url=sys.argv[1]
    print('\nThe URL is:',url,'\n')
    #讀取url所指向的資源
    html_file=urllib.request.urlopen(url)
    byte_content=html_file.read()
    #將html網(wǎng)頁保存起來
    url_file=open('E:\\img\\html\\result.htm','wb')
    url_file.write(byte_content)
    url_file.close()
    #從字節(jié)轉(zhuǎn)換為字符串
    s=str(byte_content, encoding = "utf-8")
    #print(s)
    #bytes.decode(html_file.read())
    parser=MyHTMLParser(strict=False)
    parser.feed(s)
# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
    main()

相關(guān)文章

  • python修改微信和支付寶步數(shù)的示例代碼

    python修改微信和支付寶步數(shù)的示例代碼

    這篇文章主要介紹了python修改微信和支付寶步數(shù)的示例代碼,本文給大家介紹的非常詳細(xì),對大家的餓學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • python模擬嗶哩嗶哩滑塊登入驗證的實現(xiàn)

    python模擬嗶哩嗶哩滑塊登入驗證的實現(xiàn)

    這篇文章主要介紹了python模擬嗶哩嗶哩滑塊登入驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python學(xué)習(xí)之循環(huán)方法詳解

    Python學(xué)習(xí)之循環(huán)方法詳解

    循環(huán)是有著周而復(fù)始的運動或變化的規(guī)律;在 Python 中,循環(huán)的操作也叫做 遍歷。與現(xiàn)實中一樣,Python 中也同樣存在著無限循環(huán)的方法與有限循環(huán)的方法。本文將通過示例詳細(xì)講解Python中的循環(huán)方法,需要的可以參考一下
    2022-03-03
  • Python爬蟲數(shù)據(jù)處理模塊的安裝使用教程

    Python爬蟲數(shù)據(jù)處理模塊的安裝使用教程

    這篇文章主要為大家介紹了Python爬蟲數(shù)據(jù)處理模塊的安裝使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python 中l(wèi)ist ,set,dict的大規(guī)模查找效率對比詳解

    Python 中l(wèi)ist ,set,dict的大規(guī)模查找效率對比詳解

    這篇文章主要介紹了Python 中l(wèi)ist ,set,dict的大規(guī)模查找效率對比詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • pycharm運行pytest中文編碼格式錯亂解決

    pycharm運行pytest中文編碼格式錯亂解決

    這篇文章主要為大家介紹了pycharm運行pytest中文編碼格式錯亂的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python機器學(xué)習(xí)應(yīng)用之支持向量機的分類預(yù)測篇

    Python機器學(xué)習(xí)應(yīng)用之支持向量機的分類預(yù)測篇

    最近完成的一個項目用到了SVM,之前也一直有聽說支持向量機,知道它是機器學(xué)習(xí)中一種非常厲害的算法。利用將近一個星期的時間學(xué)習(xí)了一下支持向量機,把原理推了一遍,感覺支持向量機確實挺厲害的,這篇文章帶你了解它
    2022-01-01
  • 解決Mac下首次安裝pycharm無project interpreter的問題

    解決Mac下首次安裝pycharm無project interpreter的問題

    今天小編就為大家分享一篇解決Mac下首次安裝pycharm無project interpreter的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python讀取csv文件實例解析

    Python讀取csv文件實例解析

    這篇文章主要介紹了Python讀取csv文件實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Python通過Django實現(xiàn)用戶注冊和郵箱驗證功能代碼

    Python通過Django實現(xiàn)用戶注冊和郵箱驗證功能代碼

    這篇文章主要介紹了Python通過Django實現(xiàn)用戶注冊和郵箱驗證功能代碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12

最新評論