天涯论坛

 找回密码
 立即注册
搜索
查看: 37|回复: 5

带你完成第1个爬虫,简单爬取百度照片

[复制链接]

2993

主题

220

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99099166
发表于 2024-8-25 18:09:47 | 显示全部楼层 |阅读模式

大众好,我是润森

什么是爬虫

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

爬虫协议

Robots协议(叫作为爬虫协议、设备人协议等)的全叫作是“网络爬虫排除标准”(Robots Exclusion Protocol),网站经过Robots协议告诉搜索引擎那些页面能够抓取,那些页面不可抓取。

robots.txt文件是一个文本文件,运用任何一个平常的文本编辑器,例如Windows系统自带的Notepad,就能够创建和编辑它。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中拜访网站的时候要查看的第1个文件。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)批量爬取

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

网站的分析

首要认识json

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

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

JSON字符串

{ “name”: “毛利”, “age”: 18, “ feature “ : [‘高’, ‘富’, ‘帅’] }

Python字典

{ ‘name’: ‘毛利’, ‘age’: 18feature’ :[‘高’, ‘富’, ‘帅’] }

然则在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=©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&1561022599290=,headers = headers).text res = json.loads(r)[data] forindex,iin enumerate(res): url = i[hoverURL] print(url) with open( {}.jpg.format(index),wb+) as f: f.write(requests.get(url).content)
构造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=©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&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=©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&1561022599290=

其实能够发掘,当再次发起请求时,关键便是那个 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=©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&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 inenumerate(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)




上一篇:搜索引擎蜘蛛对独立网站页面的爬行规律
下一篇:百度蜘蛛爬虫的工作原理
回复

使用道具 举报

13

主题

422

回帖

10万

积分

超级版主

Rank: 8Rank: 8

积分
100435
发表于 2024-9-7 17:58:00 | 显示全部楼层
你的话语如春风拂面,让我心生暖意。
回复

使用道具 举报

0

主题

992

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-9-9 21:02:14 | 显示全部楼层
这夸赞甜到心里,让我感觉温暖无比。
回复

使用道具 举报

2984

主题

2万

回帖

9956万

积分

论坛元老

Rank: 8Rank: 8

积分
99569176
发表于 2024-10-17 21:01:44 | 显示全部楼层
你的见解独到,让我受益匪浅,期待更多交流。
回复

使用道具 举报

3043

主题

2万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96065868
发表于 2024-10-26 15:04:49 | 显示全部楼层
祝福你、祝你幸福、早日实现等。
回复

使用道具 举报

3068

主题

2万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99138956
发表于 3 天前 | 显示全部楼层
谢谢、感谢、感恩、辛苦了、有你真好等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-22 12:42 , Processed in 0.178902 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.