什么是爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。(来源: 百度百科)

爬虫协议

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。(来源: 百度百科)

爬虫百度图片

目标:爬取百度的图片,并保存电脑中

能不能爬?

首先数据是否公开?能不能下载?

从图中可以看出,百度的图片是完全可以下载,说明了图片可以爬取

先爬取一张图片

首先,明白图片是什么?

有形式的事物,我们看到的,是图画、照片、拓片等的统称。图是技术制图中的基础术语,指用点、线、符号、文字和数字等描绘事物几何特征、形态、位置及大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。

然后需要图片在哪里?

图片是在云服务器的数据库中的保存起来的

每张图片都有对应的url,通过requests模块来发起请求,在用文件的wb+方式来保存起来

import requests

r = requests.get('http://pic37.nipic.com/20140113/8800276_184927469000_2.png')

with open('demo.jpg','wb+') as f:

f.write(r.content)1

2

3

4

批量爬取

但是有谁为了爬一张图片去写代码,还不如直接去下载 。爬虫是目的就是为了达到批量下载的目的,这才是真正的爬虫

网站的分析

首先了解json

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

json 就是js 的对象,就是来存取数据的东西

JSON字符串

{

“name”: “毛利”,

“age”: 18,

“ feature “ : [‘高’, ‘富’, ‘帅’]

}1

2

3

4

5

Python字典

{

‘name’: ‘毛利’,

‘age’: 18

‘feature’ : [‘高’, ‘富’, ‘帅’]

}1

2

3

4

5

但是在python中不可以直接通过键值对来取得值,所以不得不谈谈python中的字典

导入python 中json,通过json.loads(s) -->将json数据转换为python的数据(字典)

ajax 的使用

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。

图片是通过ajax 方法来加载的,也就是当我下拉,图片会自动加载,是因为网站自动发起了请求,

分析图片url链接的位置

同时找到对应ajax的请求的url

构造ajax的url请求,来将json转化为字典,在通过字典的键值对来取值,得到图片对应的url

import requests

import json

headers = {

'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('https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&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&1561022599290=',headers = headers).text

res = json.loads(r)['data']

for index,i in enumerate(res):

url = i['hoverURL']

print(url)

with open( '{}.jpg'.format(index),'wb+') as f:

f.write(requests.get(url).content)1

2

3

4

5

6

7

8

9

10

11

12

构造json的url,不断的爬取图片

在一个json 的有30张图片,所以发起一个json的请求,我们可以爬去30张图片,但是还是不够。

首先分析不同的json中发起的请求

https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&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&1561022599355=

https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&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&1561022599290=1

2

其实可以发现,当再次发起请求时,关键就是那个 pn在不断的变动

最后封装代码,一个列表来定义生产者来存储不断的生成图片url,另一个列表来定义消费者来保存图片

# -*- coding:utf-8 -*-

# time :2019/6/20 17:07

# author: 毛利

import requests

import json

import os

def get_pic_url(num):

pic_url= []

headers = {

'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'}

for i in range(num):

page_url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&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&1561022599290='.format(30*i)

r = requests.get(page_url, headers=headers).text

res = json.loads(r)['data']

if res:

print(res)

for j in res:

try:

url = j['hoverURL']

pic_url.append(url)

except:

print('该图片的url不存在')

print(len(pic_url))

return pic_url

def down_img(num):

pic_url =get_pic_url(num)

if os.path.exists('D:\图片'):

pass

else:

os.makedirs('D:\图片')

path = 'D:\图片\\'

for index,i in enumerate(pic_url):

filename = path + str(index) + '.jpg'

print(filename)

with open(filename, 'wb+') as f:

f.write(requests.get(i).content)

if __name__ == '__main__':

num = int(input('爬取几次图片:一次30张'))

down_img(num)1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

欢迎关注公众号

python爬虫爬取百度图片总结_爬虫篇| 爬取百度图片(一)相关推荐

  1. Python科学计算库核心知识点总结_代码篇(ML/DL依赖语法)

    Python科学计算库核心知识点总结_代码篇(ML/DL依赖语法)                                                                    ...

  2. python爬取软件内数据_各种数据爬取工具爬虫合集整理

    却道天凉好个秋~ 不用编程敲代码的爬取数据的工具合集,简单上手易用的爬虫脚本工具软件汇总 1.工具软件类: Microsoft Excel excel也可以爬一些规整的表格数据等,没想到吧! 八爪鱼 ...

  3. python 爬虫代码_python之路(一)_爬虫—爬一下网页代码输出到文件

    在上次公众号中讲到要用python进行开发,所以又拾起来了python.这不,从爬虫进行入门熟悉一下.爬虫是个啥呢?简单说:就是你想高效地从网上获取一些信息,而不用鼠标点点点.官方解释:网络爬虫(又称 ...

  4. python爬取历史天气查询_历史天气爬取

    历史天气爬取 爬取来源:2345天气网 爬取周期:月度,可自行更改 爬取城市:部分城市,可自行更改 具体代码: import requests import demjson import csv li ...

  5. python地板除与除法的区别_“地板除”还是“取整除”?地板除和天花板除floor division和ceil devision...

    上一篇文章知识点太多,我需要一一查看理解. 在运算符 ➡ 算数运算符 ➡ 操作符 ➡ // 整除(地板除) 3//4 为什么叫地板除? 向下取整除,就是地板除 floor division 向上取整除 ...

  6. python怎么编写wireshark抓的包_使用Wireshark 抓取数据包

    Wireshark 是一个网络封包分析软件.网络封包分析软件的功能是获取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换. 一  ...

  7. 代码里无图片地址_项目实战:爬高清图片

    ↑ 关注 + 星标 ,后台回复[大礼包]送你2TPython自学资料 好消息:Python学习交流群,已经建立,猛戳加入 之前我发过一些爬虫的文章,不过一直没发过爬取图片的,今天就给大家分享一篇吧! ...

  8. 植发搞笑图片_搞笑秃头图片大全_关于秃顶的搞笑图片

    罗志祥昨日微博发秃头照 变成搞笑阿伯(图) 319x464 - 20KB - JPEG 秃顶狗新发型 --东方图片 492x352 - 162KB - JPEG [星8卦]秃顶版皮特,搞笑版金刚狼!明 ...

  9. 更改图片位置_如何轻松快速地将图片转换到JPG/JPEG/PNG/BMP/TIFF

    万兴优转可用作为图片转换器,帮助您批量更改图片格式,且不会丢失任何质量.例如,您可以将PNG转换到JPG或其他格式,反之亦然.您还可以通过更改图片宽度和高度来调整图片大小,或者通过裁剪,旋转,添加效果 ...

最新文章

  1. 【转载】Linux命令行常用光标移动快捷键
  2. 微服务为什么一定要用docker ?
  3. 邓力、何晓冬深度解读:多模态智能未来的研究热点
  4. Atheros AR9485 ubuntu 10.04 驱动安装及networking disable问题解决
  5. linux按键驱动中的结构体,linux 驱动之input子系统(gpio-keys)实现
  6. 收藏!这 10 篇硬核论文,让你宅家也能更了解图神经网络
  7. 一文讲透大型网站架构模式核心原理与案例分析
  8. 计算机二级C语言考的函数,【帮考网】2012计算机等级二级考试C语言:函数递归...
  9. 怎么做最棒的有效外链
  10. 目不识丁的我使用Python编写汉字注音小工具
  11. php父子遍历,jQuery 遍历
  12. 关于数据型驱动自动化测试实现
  13. 加工机械双探头高频读写器CK-FR102AN用户开发手册
  14. 四方位陈述RV系列蜗轮蜗杆减速机产品
  15. [机器学习] - 岭回归与Lasso回归
  16. 删除只读属性的文件夹及其子文件
  17. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】
  18. [OS-Linux] CentOS 7.x 系统安装以及常用配置
  19. RK3568平台开发系列讲解(安卓适配篇)Android11 预安装应用功能
  20. f5双机配置_F5负载均衡器双机切换机制及配置

热门文章

  1. Python爬取天猫店铺的企业名1:根据店铺名获得店铺链接
  2. 国产手机设计业遭遇拐点 萧条期寻觅突围路
  3. 用html画布做扇形,html5 canvas元素扇形的绘制
  4. 如何编写好的代码/成为一个更好的程序员
  5. SQL Server LocalDB本地文件数据库操作实践
  6. AD转换中知道数字量计算模拟量或温度
  7. 【Linux】Linux学习(三)常用基本命令(二)
  8. 域控策略之用户或计算机组策略例外配置
  9. Spring Boot、Spring Cloud 自定义配置文件(如何整合配置中心)
  10. 简单理解数字签名和验签