最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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爬蟲之PhantomJS和handless的使用詳解

    Python爬蟲之PhantomJS和handless的使用詳解

    這篇文章主要介紹了Python爬蟲之PhantomJS和handless的使用詳解,PhantomJS是一個基于Webkit的headless瀏覽器,它會把網(wǎng)站加載到內(nèi)存并使用webkit來編譯解釋執(zhí)行頁面上的JavaScript代碼,由于不進行css和gui渲染、不展示圖形界面,需要的朋友可以參考下
    2023-09-09
  • 這十大Python庫你真應(yīng)該知道

    這十大Python庫你真應(yīng)該知道

    這篇文章主要為大家詳細介紹了十大Python庫,學(xué)習數(shù)據(jù)分析應(yīng)該弄清楚該學(xué)習什么技能,該使用哪種工具,本文具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • pycharm命令終端運行python文件以及傳遞參數(shù)方式

    pycharm命令終端運行python文件以及傳遞參數(shù)方式

    這篇文章主要介紹了pycharm命令終端運行python文件以及傳遞參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python調(diào)用stitcher類自動實現(xiàn)多個圖像拼接融合功能

    python調(diào)用stitcher類自動實現(xiàn)多個圖像拼接融合功能

    這篇文章主要介紹了python調(diào)用stitcher類自動實現(xiàn)多個圖像拼接融合功能,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python全棧之學(xué)習CSS(2)

    Python全棧之學(xué)習CSS(2)

    這篇文章主要為大家介紹了Python全棧之CSS,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python中使用Queue和Condition進行線程同步的方法

    Python中使用Queue和Condition進行線程同步的方法

    這篇文章主要介紹了Python中使用Queue模塊和Condition對象進行線程同步的方法,配合threading模塊下的線程編程進行操作的實例,需要的朋友可以參考下
    2016-01-01
  • python數(shù)據(jù)封裝json格式數(shù)據(jù)

    python數(shù)據(jù)封裝json格式數(shù)據(jù)

    本次內(nèi)容是小編在網(wǎng)上整理的關(guān)于如何python數(shù)據(jù)封裝json格式的內(nèi)容總結(jié),有興趣的讀者們參考下。
    2018-03-03
  • PyTorch模型保存與加載實例詳解

    PyTorch模型保存與加載實例詳解

    大家都知道pytorch的模型和參數(shù)是分開的,可以分別保存或加載模型和參數(shù),這篇文章主要給大家介紹了關(guān)于PyTorch模型保存與加載的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • python連接clickhouse數(shù)據(jù)庫的兩種方式小結(jié)

    python連接clickhouse數(shù)據(jù)庫的兩種方式小結(jié)

    這篇文章主要介紹了python連接clickhouse數(shù)據(jù)庫的兩種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python如何實現(xiàn)定時器功能

    Python如何實現(xiàn)定時器功能

    在本篇文章里小編給大家分享的是關(guān)于Python中的簡單定時器實例及代碼,需要的朋友們可以學(xué)習下。
    2020-05-05

最新評論

汝城县| 玛多县| 台北县| 祁连县| 巫山县| 基隆市| 广元市| 南皮县| 澄江县| 布尔津县| 田林县| 酉阳| 樟树市| 出国| 正定县| 陆川县| 永善县| 土默特左旗| 西华县| 罗甸县| 仪陇县| 措勤县| 焉耆| 益阳市| 吉木萨尔县| 灵宝市| 湛江市| 凤庆县| 营山县| 望城县| 铜陵市| 岳阳县| 德格县| 广汉市| 寿光市| 临海市| 疏附县| 稻城县| 芜湖市| 兰西县| 黎城县|