python笔记--爬取百度图片

1.找到百度图片网站并输入搜索词

打开https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%BE%8E%E5%A5%B3&oq=%E7%BE%8E%E5%A5%B3&rsp=-1

2.分析网页

按F12打开开发者模式。

3.使用python模拟浏览器向浏览器发送请求并获取响应

用到的模块:requests。模块使用之前要先导入(import requests)。

模块安装见https://www.jianshu.com/p/d4262c8d8af8

进入url,按F12进入开发者模式,network--all--top250?start=0&filter=--headers,获取url,和requests方法。

响应回来的数据:HTML+CSS+JS+data,由浏览器进行解析执行

代码:

# 导入模块

import requests

# 发送请求

url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=12117865351080430388&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%BE%8E%E5%A5%B3&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E7%BE%8E%E5%A5%B3&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=girl&pn=30&rn=30&gsm=1e&1612964334559='

# 伪装成浏览器

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}

# 由于请求方式为get,所以需要使用requests中的get方法获取响应,响应回来的数据是json数据。若不能获取响应,解决方法见https://zhuanlan.zhihu.com/p/350375685

resp = requests.get(url, headers=headers)

4.用json在线解析器解析响应回来的json数据

将正确的url打开,Ctrl+A全选,Ctrl+C复制,粘贴到json在线解析器中,每一个object是一个图片

5.解析数据,将响应转换成json格式

代码:

import requests

url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=12117865351080430388&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%BE%8E%E5%A5%B3&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E7%BE%8E%E5%A5%B3&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=girl&pn=30&rn=30&gsm=1e&1612964334559='

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}

resp = requests.get(url, headers=headers)

resp_json = resp.json()

6.数据提取

从解析结果看到我们要找的data是在一个字典里,object是在一个列表里,列表中有N多个字典,图片链接就在字典中。

代码:

import requests

url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=12117865351080430388&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%BE%8E%E5%A5%B3&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E7%BE%8E%E5%A5%B3&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=girl&pn=30&rn=30&gsm=1e&1612964334559='

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}

resp = requests.get(url, headers=headers)

resp_json = resp.json()

# 根据键获取data的值

data_list = resp_json['data']

# 创建空列表存储图片的链接地址

lst = [ ]

# 继续提取数据,遍历列表中的数据,根据键获取thumbURL的值

for item in data_list:

     # 最后一个object没有数据,故此处加一个判断

     if len(item) != 0:

         lst.append(item['thumbURL'])

7.请求url为每张图片的地址,获取数据,再存储数据

代码:

import requests

url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=12117865351080430388&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%BE%8E%E5%A5%B3&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E7%BE%8E%E5%A5%B3&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=girl&pn=30&rn=30&gsm=1e&1612964334559='

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}

resp = requests.get(url, headers=headers)

resp_json = resp.json()

data_list = resp_json['data']

lst = [ ]

for item in data_list:

     if len(item) != 0:

         lst.append(item['thumbURL'])

# 计数作为图片名称

count = 0

# 遍历列表存储所有图片

for item in lst:

     # 发送请求

     resp = requests.get(item, headers=headers)

     count += 1

     #,创建img文件夹, wb:写入二进制数据

     with open('img/'+str(count)+'.jpg', 'wb') as file:

     file.write(resp.content)

print('图片爬取完毕')

8.附录

response对象的常用属性

response.status_code,检查请求是否成功

response.content,把response对象转换成二进制数据

response.text,把response对象转换成字符串数据

response.encoding,定义response对象的编码


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容