一.需要工具
1.python3
2.pycharm
3.谷歌浏览器
注:不想深究想直接拿来用的,可以跳过操作步骤,直接看结尾说明,只要是百度图片都是共用的。
二.操作步骤
(1).打开浏览器,点击百度图片,并搜索,如图:
(2).按F12进入控制台,依次点击Network->XHR,然后鼠标移到有图片的网页上,滑轮向下划几下,会出现acjson关键字的信息,这些就是由js控制生成的网页信息。找出两段带acjson的信息,点开 Headers,找到下面的Query String Paraments,对比该字段下的所有属性,最终找出一个 pn字段,该字段会随着网页下滑而数值增加。So,找到关键字点。
(3).我们可以利用 pn关键字来改变要显示图片次序,比如在网址后加上&pn=120,就表示从第120张图片开始显示,如图:
(4).这一步解决获取图片url的问题:
- 首先打开网页的js文件,搜索.jpg(为啥是jpg这个可以通过控制台查看)
- 然后找到图片的链接,以及该链接的key
如图
我们最终找到js中, thumbURL这个字段对应了图片链接,至此准备工作结束。
三.实现代码
import re
import urllib.request
# 地址直接从浏览器拷过来
url="https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%B9%C5%B7%E7&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111&pn=0"
# 这个步骤可以分为三步(最终获取的是该链接的所有源代码)
# 解析 urllib.request.urlopen(url)
# 获取 read()
# 转换编码 decode()
html=urllib.request.urlopen(url).read().decode("utf8")
# print(html)
# 通过正则表达式,来获取图片链接(步骤二.(4))
html = re.findall('"thumbURL":"(.*?)"', html, re.S)
# print(html)
index = 0
# 保存图片的目录,注意目录不能是不存在的,否则会报错
localPath = "F:\pythonLX\source\古风\\"
# 设定只下载1000张,也可设得非常大,获取所有图片
while index < 1000:
for imgUrl in html:
print('正在下载,第%d张:%s' %(index, imgUrl))
# 将图片写入到本地
urllib.request.urlretrieve(imgUrl, localPath + "第%d.jpg" % index)
index += 1
# 这步得目的就是变更网页地址(通过 pn 关键字),获取新的图片(步骤二.(2),(3))
url = re.sub("&pn=\d+", "&pn=%d" % index, url)
print(url)
html = urllib.request.urlopen(url).read().decode("utf8")
html = re.findall('"thumbURL":"(.*?)"', html, re.S)
print("+++++++len:", len(html))
四.结尾
本文章的关键点在于 如何获取 改变 网址的关键字,以及获取图片链接, 不过这些都是共用的,如果不想深入了解,有点基础的读者可以直接把代码拿来用也行,只要修改2处即可:
1.初始url
2.保存目录 localPath
就这样了,有不懂的可留言。