下面小编就为大家带来一篇批量下载对路网图片并生成 html 的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
对路使用 ajax 实现异步加载内容, 在它的 js 代码中找到了相关代码
- type: 'POST',
- url: '/index.php/request/new_data2/' + times + '/' + locinfo[domn][0],
- dataType: 'json',
返回的 json 字符串是一个被序列化的数组, 数组中存放的是字典, 其中要关注的是 dict['t'] 以及 dict['i'],dict['t'] 存放了图片的说明, dict['i'] 存放了图片的 url. 知道了这些后就可以开始 python 脚本了
import 相关模块
- # -*- coding: utf-8 -*-
- import urllib2 as url
- import json
- import sys
- import os
- from datetime import *
(已经修复不能获取指定类型的 bug,请求的 url 中最后一个数字代表类型)
获取 json:index 是下载的第几页, type 是 tws(太猥琐) tr(太热) tgx(太搞笑) tml(太萌了) tht(太好听 tyy(太养眼) 之一
然后是创建 html 文件
- def create_html(alllist,name):
- html_head='<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>duilu</title><body>'
- html_end="</body></html>"
- f=open("%s.html"%(name),"w")
- f.write(html_head)
- for x in range(len(alllist)):
- f.write('<div><img src="%s/%s.gif"/>'%(name,str(x)))
- f.write('<p>%s</p></div>'%(alllist[x]['t'].encode('utf-8')))
- f.write(html_end)
- f.close()
下载图片
- def download(list,dirname,index=0):
- os.chdir(dirname)
- for dict in list:
- imgurl=dict['i']
- text= dict['t']
- print index
- print imgurl
- print text
- res=url.urlopen(imgurl)
- img_type=".gif"
- content_type=res.headers["content-type"]
- if content_type=="image/jpeg":
- type=".jgp"
- filepath="%s"%(str(index)+img_type)
- f=open(filepath,"wb")
- f.write(res.read())
- f.close()
- res.close()
- index+=1
- os.chdir("../")
主函数, 用于调用上面那几个函数
- def start(type,lenght):
- lenght=int(lenght)
- now=datetime.now()
- now=now.strftime("%m-%d %H.%M.%S")
- os.mkdir(type+now)
- alllist=[]
- for x in range(0,lenght):
- list=get_json(x,type)
- alllist.extend(list)
- create_html(alllist,type+now)
- download(alllist,type+now)
- print "\r\n\r\n==============OK==============\r\n\r\n"
一个循环体, 获取用户输入
- while(True):
- print "输入tws(太猥琐) tr(太热) tgx(太搞笑) tml(太萌了) tht(太好听 tyy(太养眼) 之一\r\nexit:退出"
- type=raw_input()
- all_type=["tgx","tws","tyy","tr","tml","tht"]
- if type in all_type:
- print "键入下载页数:"
- lenght=raw_input()
- start(type,lenght)
- elif type=="exit":
- break
- else:
- print "\r\n输入有误\r\n"
ok 完成了, 脚本会在当前目录下生成一个以时间命名的 html 文件以及同名文件夹来存放图片。
测试了一下,下载 100 多张图片用了几分钟,所以呢我觉得不需要多线程来下载。
也可以稍稍修改下生成 html 的地方,变成分页显示,然后将网页拖进安卓手机里看也是不错的
用 python 就是那么简单!
以上这篇批量下载对路网图片并生成 html 的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 phperz。
来源: http://www.phperz.com/article/17/0226/265086.html