python3抓取异步百度瀑布流动态图片(二)get、json下载代码讲解
制作解析网址的get
def gethtml(url,postdata): header = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Referer':
'http://image.baidu.com',
'Host': 'image.baidu.com',
'Accept': 'text/plain, */*; q=0.01',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection':'keep-alive'} # 解析网页
html_bytes = requests.get(url, headers=header,params = postdata) return html_bytes
头部的构造请参考上一篇博文:
python3抓取异步百度瀑布流动态图片(一)查找post并伪装头方法
分析网址:
http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=gif&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word=gif&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=30&rn=30&gsm=1e&1472364207674=
分解为:
url = 'http://image.baidu.com/search/acjson?' + postdata + lasturl
lasturl为时间戳,精确到后三位小数的时间戳,构造这个时间戳,后三位小数我就随机生成一个三位数了:
import time
import random
timerandom = random.randint(100,999)
nowtime = int(time.time())
lasturl = str(nowtime) + str(timerandom) + '='
最后制作postdata:
# 构造post
postdata = {
'tn':'resultjson_com',
'ipn':'rj',
'ct':201326592,
'is':'',
'fp':'result',
'queryWord': keyword,
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': -1,
'z':'',
'ic': 0,
'word': keyword,
's': '',
'se': '',
'tab': '',
'width': '',
'height': '',
'face': 0,
'istype': 2,
'qc': '',
'nc': 1,
'fr': '',
'pn': pn,
'rn': 30,
'gsm': '1e'
}
其中页数pn和搜索关键字keywork为:
# 搜索的关键字
# keywork = input('请输入你要查找的关键字')
keyword = 'gif' # 页数
# pn = int(input('你要抓取多少页:'))
pn = 30
将得到的信息保存在本地,当所有都保存下来了再去下载图片:
# 解析网址
contents = gethtml(url,postdata) # 将文件以json的格式保存在json文件夹
file = open('../json/' + str(pn) + '.json', 'wb')
file.write(contents.content)
file.close()
读取文件夹里面的所有文件:
# 找出文件夹下所有xml后缀的文件
def listfiles(rootdir, prefix='.xml'):
file = []
for parent, dirnames, filenames in os.walk(rootdir):
if parent == rootdir:
for filename in filenames:
if filename.endswith(prefix):
file.append(rootdir + '/' + filename)
return file
else:
pass
遍历json文件夹,读取里面的东西:
# 找到json文件夹下的所有文件名字
files = listfiles('../json/', '.json')
for filename in files:
print(filename)
# 读取json得到图片网址
doc = open(filename, 'rb')
# ('UTF-8')('unicode_escape')('gbk','ignore')
doccontent = doc.read().decode('utf-8', 'ignore')
product = doccontent.replace(' ', '').replace('\n', '')
product = json.loads(product)
查询字典data:
# 得到字典data
onefile = product['data']
将字典里面的图片网址和图片名称放到数组里面:
制作一个解析头来解析图片下载:
def getimg(url): # 制作一个专家
opener = urllib.request.build_opener() # 打开专家头部
opener.addheaders = [('User-Agent',
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0'),
('Referer',
'http://image.baidu.com'),
('Host', 'image.baidu.com')]
# 分配专家
urllib.request.install_opener(opener) # 解析img
html_img = urllib.request.urlopen(url) return html_img
最后将图片下载到本地的gif文件夹:
for item in onefile:
try:
pic = getimg(item['thumbURL'])
# 保存地址和名称
filenamep = '../gif/' + validateTitle(item['fromPageTitleEnc'] + '.gif')
# 保存为gif
filess = open(filenamep, 'wb')
filess.write(pic.read())
filess.close() # 每一次下载都暂停1-3秒
loadimg = random.randint(1, 3)
print('图片' + filenamep + '下载完成')
print('暂停' + loadimg + '秒')
time.sleep(loadimg) except Exception as err:
print(err)
print('暂停' + loadimg + '秒')
time.sleep(loadimg)
pass
得到效果如下:
本文只是编程,处理这种网址最重要的是思想,思想我写在上一篇博文:
python3抓取异步百度瀑布流动态图片(一)查找post并伪装头方法
思想有了,程序是很简单的问题而已。
python3抓取异步百度瀑布流动态图片(二)get、json下载代码讲解的更多相关文章
- python3抓取异步百度瀑布流动态图片(一)查找post并伪装头方法
打开流程: 用火狐打开百度图片-->打开firebug-->输入GIF图-->搜索-->点击网络-->全部 观察页面: 首先要观察的对象是“域”,图片的json一般是放在 ...
- 如何利用Python网络爬虫抓取微信朋友圈的动态(上)
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
- Java学习-046-日志抓取合并后排序问题解决方案之 --- log4j 二次定制,实现日志输出添加延时10ms
自3月25至今,已经好久没有写学习日志了,今天在写日志抓取合并的小方法,发现抓取后的日志并米有依据系统执行的日志顺序排序.日志抓取排列逻辑如下: 通过日志标识,从各个日志文件(例如 use.log,e ...
- 【js】【图片瀑布流】js瀑布流显示图片20180315
js实现把图片用瀑布流显示,只需要“jquery-1.11.2.min.js”. js: //瀑布流显示图片 var WaterfallImg = { option: { maxWidth: 850, ...
- 利用wget 抓取 网站网页 包括css背景图片
利用wget 抓取 网站网页 包括css背景图片 wget是一款非常优秀的http/ftp下载工具,它功能强大,而且几乎所有的unix系统上都有.不过用它来dump比较现代的网站会有一个问题:不支持c ...
- 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...
- Python3抓取javascript生成的html网页
用urllib等抓取网页,只能读取网页的静态源文件,而抓不到由javascript生成的内容. 究其原因,是因为urllib是瞬时抓取,它不会等javascript的加载延迟,所以页面中由javasc ...
- python3抓取淘宝评论内容
好久没有写爬虫了,今天研究了下淘宝商品评论的内容. 一开始用最简单的方法,挂代理,加请求头,对网页请求,是抓不到数据的,在网上找了一些相关文章,也基本已经过时了,就是网站逻辑有改动,用旧的方法是抓不到 ...
- Python3 抓取豆瓣电影Top250
利用 requests 抓取豆瓣电影 Top 250: import re import requests def main(url): global num headers = {"Use ...
随机推荐
- linux下vi命令
Vi共分三种模式,分别是“一般模式”.“编辑模式”与“命令行命令模式”. 1.一般模式:vi处理文件时,一进入该文件就是一般模式.在这个模式中,可以使用“上下左右”键来移动光标,可以使用“删除字符”或 ...
- CRM客户关系管理系统 ——客户联系人添加(十五)
需求描述: 1.业务员自己可以查看属于自己的客户信息 2.客服部经理可以查看查看所有客户信息 3.其他人员不得查看客户信息 效果截图:
- 锋利的jquery学习笔记
1.$("#tt")获取的永远都是一个jquery对象,所以要判断页面上是否存在某个对象不能像js中 if($("#tt")){ } 而是通过: ){ } ps ...
- alt text 与 tooltip区别
在做工具的Accessiblity测试时, 对于image对象,一直分不清它的alt属性与tooltip属性的区别与用法, 从网上查了下, 比较认同这样的观点: alt属性: alternative ...
- LeetCode Spiral Matrix II (技巧)
题意: 从1开始产生连续的n2个数字,以螺旋的方式填满一个n*n的数组. 思路: 由于是填满一个矩阵,那么只需要每次都填一圈即可.应该注意特殊情况. 迭代: class Solution { publ ...
- linux服务器并发与tcmalloc
前一天使用pmap查看服务器中自己开发的游戏服务的内存使用情况,发现其中数据存储服务的内存占用率非常高,截图如下. 从截图中可以看出来,分配了大量的64MB左右的内存空间,因为对自己的服务比较了解,知 ...
- 12. Integer to Roman
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- ZOJ 1005 Jugs
原题链接 题目大意:有一大一小两个杯子,相互倒水,直到其中一个杯子里剩下特定体积的水.描述这个过程. 解法:因为两个杯子的容积互质,所以只要用小杯子不断往大杯子倒水,大杯子灌满后就清空,大杯子里迟早会 ...
- jq事件冒泡问题
在程序中使用事件对象非常简单,只需为函数添加一个参数,jquery代码如下: $("element").bind("click",function(event) ...
- Java 前端加密传输后端解密以及验证码功能
目录(?)[-] 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 概 ...