python2.7中urlretrieve( )函数的使用

python2.7中的urllib.urlretrieve( )方法

1. urlretrieve()方法直接将远程数据(图片或者文档)下载到本地。具体参数为:

       urlretrieve(url, filename=None, reporthook=None, data=None)

  • 参数filename指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
  • 参数reporthook是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
  • 参数data指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头

2. 示例代码如下:

# encoding:utf-8
import requests
from lxml import etree
import urllib
import os
import re

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"
}


def parse_page(url):
    # 1.获取网页请求
    response = requests.get(url, headers=headers)
    text = response.text
    # print text
    # 2.解析网页内容
    html = etree.HTML(text)
    images = html.xpath("//div[@class='page-content text-center']//img[@class!='gif']")
    for img in images:
        # print etree.tostring(img)
        # img.get('data-original'):get方法可以得到‘data-original’属性的值
        img_url = img.get('data-original')
        img_name = img.get('alt')
        img_name = re.sub(r'[\??!!\.。]', '', img_name)
        img_suffix = os.path.splitext(img_url)[-1]
        img_filename = img_name+img_suffix
        urllib.urlretrieve(img_url, "Images/"+img_filename, report_hook)


def report_hook(a, b, c):
    """回调函数
    :param a:已经下载的数据块
    :param b:数据块的大小
    :param c:远程文件的大小
    :return:
    """
    per = 100.0*a*b/c
    if per > 100:
        per = 100
    print "%.2f%%" % per


def main():
    for x in range(1, 101):
        url = "http://www.doutula.com/photo/list/?page=%d" % x
        parse_page(url)
        # print url
        break


if __name__ == '__main__':
    main()

3. 运行结果为:

......
98.00%
98.84%
99.68%
100.00%

Process finished with exit code 0

Images文件夹下的文件如下:


猜你喜欢

转载自blog.csdn.net/qq_42281053/article/details/80758762
今日推荐