字符串(str)编码成字节码(bytes),字节码解码为字符串
获取当前环境编码:sys.stdin.encoding
url编码urllib.parse.quote()
url解码urllib.parse.unquote()
列表去重:pages = list(set(pages))
创建文件夹(可多级创建):os.makedirs(folder) os.mkdir()只能单级创建
首先分析网页(图虫网)的URL规律:
根网页地址形如:
http://tuchong.com/tags/人像/?page=[1, 2, 3 ...]
二级网页链接形如:
href="http://tuchong.com/239137/6400827/"
href="http://hezi1984.tuchong.com/6407909/"
目标图片链接形如:
src="http://photos.tuchong.com/27949/f/6915745.jpg"
-----程序源文件:getPic.py-----
import re, os, time import urllib.parse import urllib.request def getHtml(url):#取得网页的html纯文本 return urllib.request.urlopen(url).read().decode('utf-8') def download(url, filename):#将文件下载到本地 urllib.request.urlretrieve(url, filename) if __name__ == '__main__': print('---图虫图片抓取器---') pageNo = int(input('请输入抓取页面的数字后缀(输入q退出):')) #url汉字编码处理 url = 'http://tuchong.com/tags/{}/?page={}'.format(\ urllib.parse.quote('人像'), str(pageNo)) #获取页面HTML文本 html = getHtml(url) #解析HTML文本,得到二级网页的地址(根网页缩略图所指向的链接) rePage = r'http://tuchong.com/\d+/\d+/|http://\w+(?<!photos).tuchong.com/\d+/' pages = re.findall(rePage, html) pages = list(set(pages)) #解析二级网页,下载其中的图片 for page in pages: print('当前网页:', page) html2 = getHtml(page)#取得二级网页内容 #解析二级网页中图片地址的正则表达式 rePic = r'http://photos.tuchong.com/.+/f/.+\.jpg' pics = re.findall(rePic, html2) pics = list(set(pics)) folder = 'D:/TuChongRenXiang/{}/{}'.format(pageNo, page[-8:-1]) if not os.path.exists(folder): os.makedirs(folder) note = open(folder+'/note.txt', 'wt')#在每个文件夹下创建一个日志文件,记录下载地址 note.write('来源网址:'+page+'\n图片原始地址列表:\n') for pic in pics: note.write(pic+'\n') note.close() print('目标文件夹:', folder) time.sleep(1)#程序暂停一秒 for pic in pics: print('当前下载:', pic) download(pic, folder+'/'+pic[-11:]) print('下载结束。')