安装网络库的前提是在安装好 Python 库前提之下进行的,安装好后在命令行执行如下命令
pip install requests
命令执行结束后,如何验证 Requests 库是否正确安装呢?
C:\Users\Administrator>python
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD6
4)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.get('http://www.baidu.com')
<Response [200]>
>>>
如上最后输出结果为
我们使用豆瓣来举例。打开豆瓣,在搜索框内输入 赵丽颖 ,然后选项卡选择图片。打开浏览器的开发者工具栏,我们可以看到,服务器返回的内容是 Json 格式的(有些图片网站并不是使用 json 作为返回值的)。
{
"images": [
{
"src": "https://img1.doubanio.com/view/photo/thumb/public/p2183858789.jpg",
"author": "shop110799041",
"url": "https://www.douban.com/link2/?url=http%3A%2F%2Fwww.douban.com%2Fphotos%2Fphoto%2F2183858789%2F&query=%E8%B5%B5%E4%B8%BD%E9%A2%96&cat_id=1025&type=search",
"id": "2183858789",
"title": "2014夏妻子的秘密赵丽颖韩版明星同款雪",
"width": 170,
"height": 94
}
],
"total": 3694,
"limit": 20,
"more": true
}
从 total 和 limit 我们可以知道,总共有3694张图片,每次请求会返回20张图片。再看我们发起请求的 Url 为 https://www.douban.com/j/search_photo?q=赵丽颖&limit=20&start=0。
q 后面的参数为 赵丽颖 转换成的 Unicode 编码,limit 代表分页中每页图片的个数,start 代表从第几张图片开始请求。
因此我们可以使用一个循环体来不断请求服务器,然后就可以获得所有的图片地址,如下
import requests
doubanPicUrl = 'https://www.douban.com/j/search_photo'
# 请求查看名人的图片库信息
resText = requests.get(doubanPicUrl + '?q=' + queryName + '&limit=1&start=0').text
# 将返回的 Json 内容转换为 python 对象
resJson = json.loads(resText, encoding='utf-8')
total = resJson['total']
print("总共发现女神照片" + str(total) + '张')
for i in range(0, total, 20):
queryUrl = doubanPicUrl + '?q=' + queryName + '&limit=20&start=' + str(i)
resText = requests.get(queryUrl).text
resJson = json.loads(resText, encoding='utf-8')
for image in resJson['images']:
print('图片地址:' + image['src'])
至此我们已经获得女生的所有照片,接下就可以下载保存图片咯。
import requests
import json
import os, sys
from pathlib import Path
# 封装下载图片方法
def downloadPic(src, id, targetFolder):
dir = './' + targetFolder + '/' + str(id) + '.jpg'
try:
pic = requests.get(src, timeout = 10)
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
except requests.exceptions.ConnectionError:
print("图片无法下载")
只需要在上一段中的双层 for 循环中,调用我们的 downloadPic 方法即可完成下载保存图片。
[完整代码] https://github.com/superstonne/python/blob/master/req.py)