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

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

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

有三種方法,一是用微軟提供的擴(kuò)展庫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則是需要自己寫個(gè)類繼承基類,重寫解析元素的方法。個(gè)人感覺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則生成文件,添加計(jì)數(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是一個(gè)基于Webkit的headless瀏覽器,它會把網(wǎng)站加載到內(nèi)存并使用webkit來編譯解釋執(zhí)行頁面上的JavaScript代碼,由于不進(jìn)行css和gui渲染、不展示圖形界面,需要的朋友可以參考下
    2023-09-09
  • 這十大Python庫你真應(yīng)該知道

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

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

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

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

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

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

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

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

    Python中使用Queue和Condition進(jìn)行線程同步的方法

    這篇文章主要介紹了Python中使用Queue模塊和Condition對象進(jìn)行線程同步的方法,配合threading模塊下的線程編程進(jìn)行操作的實(shí)例,需要的朋友可以參考下
    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模型保存與加載實(shí)例詳解

    PyTorch模型保存與加載實(shí)例詳解

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

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

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

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

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

最新評論

涪陵区| 古田县| 淮南市| 朔州市| 萍乡市| 威远县| 万山特区| 宿州市| 东阳市| 三门峡市| 渭南市| 石楼县| 灌阳县| 宁蒗| 黎城县| 石景山区| 蚌埠市| 蒙山县| 玉环县| 多伦县| 时尚| 赫章县| 桂平市| 长垣县| 万全县| 加查县| 临沭县| 安徽省| 青海省| 新邵县| 额济纳旗| 碌曲县| 德州市| 呼图壁县| 广西| 西华县| 沙雅县| 缙云县| 海丰县| 崇文区| 霍山县|