您的位置:首页 > 理论基础 > 计算机网络

Python -- 网络编程 -- 抓取网页图片 -- 图虫网

2014-05-04 23:20 405 查看
字符串(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('下载结束。')




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: