Python 如何爬取女神的照片

安装 Requests 网络库

安装网络库的前提是在安装好 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]>
>>>

如上最后输出结果为 , 则代表 Requests 库已经完成安装

分析图片库的响应体

我们使用豆瓣来举例。打开豆瓣,在搜索框内输入 赵丽颖 ,然后选项卡选择图片。打开浏览器的开发者工具栏,我们可以看到,服务器返回的内容是 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
}

totallimit 我们可以知道,总共有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)

欢迎关注,来倾听我的分享
Python 如何爬取女神的照片_第1张图片

你可能感兴趣的:(Python 如何爬取女神的照片)