Python 3 爬虫之批量下载字帖图片

朋友想下载这62个网页中的字帖图片:http://www.yac8.com/news/11003.html


一、要点

1. Chrome 「审查元素」中看到的源代码与真实的源码不同。


2. 图片网址附近源码:

<img alt="字帖欣赏《顾仲安钢笔行书字帖-中外名人书信选》" title="字帖欣赏《顾仲安钢笔行书字帖-中外名人书信选》"   border="0" src="http://www.yac8.com/upFiles/yac802/20140914064219763.jpg" /> 
获取源码的正则表达式:

<img\s+alt="字帖欣赏《顾仲安钢笔行书字帖-中外名人书信选》"[^>]*?src="(.+?\.jpg)"[^>]*?>
建议使用Expresso,带有语义分析功能


3. 网页编码是GB2312:

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

4. 第一页的网址是/11003.html,后面第X页的网址是11003_x.html


二、代码

注意这里用的是Python 3

import urllib.request
import re
import time

# 作为保存的图片文件名
index = 1

# 获取网页源码
def getHtml(url):
    page = urllib.request.urlopen(url) # 打开一个URL地址
    html = page.read().decode('gb2312') # 读取URL上的数据
    return html

# 网页中的图片网址:
# <img alt="字帖欣赏《顾仲安钢笔行书字帖-中外名人书信选》" title="字帖欣赏《顾仲安钢笔行书字帖-中外名人书信选》"   border="0" src="http://www.yac8.com/upFiles/yac802/20140914064219763.jpg" /> 
def getImg(html):
    re_image_url = r'<img\s+alt="字帖欣赏《顾仲安钢笔行书字帖-中外名人书信选》"[^>]*?src="(.+?\.jpg)"[^>]*?>'
    img_url_list = re_image_url.findall(html)
    global index
    for img_url in img_url_list:
        # 将远程数据下载到本地
        urllib.request.urlretrieve(img_url,save_path + r'\%s.jpg' % index)
        index += 1

origin_url_head = r'http://www.yac8.com/news/11003'
origin_url_tail = r'.html'
save_path = r'F:\python_results'


time1= time.time()

getImg(getHtml(origin_url_head + origin_url_tail))

for x in range(2,63):
    getImg(getHtml(origin_url_head + '_%s' % x + origin_url_tail))

time2= time.time()
print('下载完成!一共下载了 %s 个文件,用时 %s 秒' % (index, time2-time1))
最终结果:

下载完成!一共下载了 186 个文件,用时 98.609375 秒

三、思考

仍然存在一些问题,比如下载中途出错怎么办?应该添加try except保存错误信息,下载完成后再重试。

你可能感兴趣的:(Python 3 爬虫之批量下载字帖图片)