Python加lxml实现图片解析下载功能
生活随笔
收集整理的這篇文章主要介紹了
Python加lxml实现图片解析下载功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、下載網頁:OpenHtml.py
import urllib.request from urllib.parse import quoteclass HtmlLoader(object):def Open(self, chaper_url):if chaper_url is None:return Noneheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}req = urllib.request.Request(url=chaper_url, headers=headers)response = urllib.request.urlopen(req)if response.getcode() != 200:return Nonereturn response.read()2、解析圖片:ImageAnalysis.py
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import OpenHtml from urllib.parse import quote import lxml.htmlclass Imager:def Analysis(self,url):# 解決中文搜索問題 對于:?=不進行轉義root_url = quote(url, safe='/:?=')openhtml=OpenHtml.HtmlLoader()html = openhtml.Open(url)# 將HTML解析為統一的格式tree = lxml.html.fromstring(html)# 通過lxml的xpath獲取src屬性的值,返回一個列表img = tree.xpath('//img[@class="BDE_Image"]/@src')return img3、下載圖片:LoadFile.py
import urllib.request as reclass Loader:def callback(self,a,b,c):'''回調函數可以用來顯示進度@a:已經下載的數據塊個數@b:數據塊的大小@c:遠程文件的大小'''per=100.0*a*b/cif per>100:per=100print('%.2f%%' % per)def Down(self, url, filename):# dir = os.path.abspath('.')# work_path = os.path.join(dir, 'baidu.html')re.urlretrieve(url, filename, self.callback)4、啟動文件,即測試文件main.py
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' #!/usr/bin/env python # coding=utf-8import ImageAnalysis import LoadFiledef downimge():# url = "http://www.btany.com/search/桃谷繪里香-first-asc-1"url = "https://tieba.baidu.com/p/5475267611"imganalysis=ImageAnalysis.Imager()img=imganalysis.Analysis(url)# 迭代列表img,將圖片保存在當前目錄下x=0download=LoadFile.Loader()for i in img:download.Down(i, 'C:\\Users\\luffy\\Desktop\\img\\%s.jpg' % x)x += 1if __name__ == '__main__':downimge()# download = LoadFile.Loader()# download.Down('http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2', 'C:\\Users\\luffy\\Desktop\\img\\Python-2.7.5.tar.bz2')urllib模塊提供的urlretrieve()函數。urlretrieve()方法直接將遠程數據下載到本地。
urlretrieve(url, filename=None, reporthook=None, data=None)
- 參數filename指定了保存本地路徑(如果參數未指定,urllib會生成一個臨時文件保存數據。)
- 參數reporthook是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢時會觸發該回調,我們可以利用這個回調函數來顯示當前的下載進度。
- 參數data指post導服務器的數據,該方法返回一個包含兩個元素的(filename, headers) 元組,filename 表示保存到本地的路徑,header表示服務器的響應頭
總結
以上是生活随笔為你收集整理的Python加lxml实现图片解析下载功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python list排序的两种方法及实
- 下一篇: 回调函数的意义以及python实现