网页爬虫抓取百度图片(什么是爬虫网络爬虫(一)_百度百科_光明网)
优采云 发布时间: 2021-12-25 10:15网页爬虫抓取百度图片(什么是爬虫网络爬虫(一)_百度百科_光明网)
什么是爬虫
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中,更常见的是网络追逐)是根据某些规则自动抓取万维网上信息的程序或脚本。其他不太常用的名称包括蚂蚁、自动索引、模拟器或蠕虫。(来源:百度百科)
爬虫协议
机器人协议(也称为爬虫协议、机器人协议等)代表“机器人排除协议”(Robots Exclusion Protocol)。该网站使用Robots协议来告诉搜索引擎哪些页面可以被抓取,哪些页面不能被抓取。
robots.txt 文件是一个文本文件。您可以使用任何常用的文本编辑器(例如 Windows 附带的记事本)来创建和编辑它。robots.txt 是一个协议,而不是一个命令。robots.txt 是搜索引擎访问网站时要查看的第一个文件。robots.txt 文件告诉蜘蛛可以在服务器上查看哪些文件。(来源:百度百科)
爬虫百度图片
目标:抓取百度的图片并保存在电脑上。它们可以被抓取吗?
首先,数据是否公开?可以下载吗?
从图中可以看出,百度的图片是完全可以下载的,也就是说可以先抓取图片来抓取图片
首先要明白什么是图片?我们看到,有形式的事物是图片、照片、拓片等的统称。图片是技术绘图中的基本术语。它是指用点、线、符号、字符和数字来描述事物的几何特征、形状、位置和大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。
那么需要的图片在哪里呢?图片保存在云服务器的数据库中
每张图片都有一个对应的网址。通过requests模块发起请求,文件保存在wb+方法中。*敏*感*词*请求
r = requests.get('#39;)
with open('demo.jpg','wb+') as f:
f.write(r.content) 批量爬取,但是谁写代码为了爬取一张图片,还是直接下载比较好。爬虫的目的是为了达到批量下载的目的,这是真实爬虫网站的分析
首先了解jsonJSON(JavaScript Object Notation,JS Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会开发的 js 规范)的一个子集,并使用完全独立于编程语言的文本格式来存储和表示数据。简洁明了的层次结构使 JSON 成为一种理想的数据交换语言。
json是js的对象,用来访问数据的JSON字符串{
"名称": "毛利人",
“年龄”:18,
《特征》:[‘高’、‘富’、‘帅’]
}Python字典{
'name':'毛利人',
“年龄”:18
'特征':['高','富','帅']
但是在python中不能直接通过key-value对获取值,所以不得不说python中的字典在python中导入json,通过json.loads(s) --> 将json数据转换成python数据(字典) ajax 的使用 Ajax,或“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种用于创建交互式 Web 应用程序的 Web 开发技术。
图片是通过ajax方法加载的,也就是我下拉的时候,图片会自动加载,因为网站自动发起请求,分析图片url链接的位置,找到ajax请求对应的url来构造ajax url请求,json转成字典,通过字典的键值对获取value,获取图片对应的url导入请求
导入json
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
r = requests.get('%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=% E5 %9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=',headers = headers).text
res = json.loads(r)['数据']
对于索引,我在 enumerate(res) 中:
url = i['hoverURL']
打印(网址)
with open('{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content) 构造json的url,不断爬取图片。一个json里面有30张图片,所以当我们发起一个json请求的时候,可以抓取30张图片,但是还是不够。
首先分析不同json%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=发起的请求%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&55=
%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7 % 89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&90=
其实可以发现,再次发起请求的时候,关键是pn在不断变化
最后封装一下代码,一个list定义生产者存储连续生成的图片url,另一个list定义consumer存储图片# -*- coding: utf-8 -*-
# 时间:2019/6/20 17:07
#作者:毛利
*敏*感*词*请求
导入json
导入操作系统
def get_pic_url(num):
pic_url= []
标题 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /74.0.3729.131 Safari/537.36'}
对于范围内的我(数量):
page_url ='%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B% BE %E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&90='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['数据']
如果资源:
打印(资源)
对于 res 中的 j:
尝试:
url = j['hoverURL']
pic_url.append(url)
除了:
print('图片的url不存在')
打印(len(pic_url))
返回 pic_url
def down_img(num):
pic_url =get_pic_url(num)
如果 os.path.exists('D:\picture'):
经过
别的:
os.makedirs('D:\图片')
路径='D:\图片\\'
对于索引,我在枚举(pic_url)中:
文件名 = 路径 + str(index) +'.jpg'
打印(文件名)
with open(filename,'wb+') as f:
f.write(requests.get(i).content)
如果 __name__ =='__main__':
num = int(input('抓取多张图片:一次30张图片'))
down_img(数量)
爬行过程
抓取结果
该文章最初发表于: