网页爬虫抓取百度图片(什么是爬虫网络爬虫(一)_百度百科_光明网)

优采云 发布时间: 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(数量)

  爬行过程

  抓取结果

  该文章最初发表于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线