Python爬取图片

爬取网站  https://image.baidu.com/

先打开页面

然后点击动物图片 当然选择哪个都可以我这里只是喜欢动物的所以选择这个分类

爬取任何数据 第一步就是先确定数据来源 先打开 f12 来看一下

先点击随便一个图片右键 然后点击检查 就会跳到那个图片所在的位置 如下:

 当看你看到响应里有确切的地址的时候 先不要着急爬取  先复制这个链接然后点击查看页面源代码 查找一下里面有没有这个地址

可以看的出来网页 源代码里面没有  到这一步就可以确定是用ajax异步来传送的数据

然后我们再f12 里面  点击Network 下面的XHR  进行页面刷新如下:

如果还没有出来数据  就把滚动条往下拉一下就可以看到有新的请求链接 记得多往下滚动一下 做一下对比 如下:

我们点开previem 可以看到是json格式 然后打开可以看到有30个图片的数据

我们随便点开一个就可以看到里面 有明确的图片的源地址 我们可以复制打开一下

thumbnailUrl: 这里面就是源地址 可以打开看下  如下:

 我们现在知道的图片的地址  但是要抓取所以图片就需要进行二级页面的爬虫  

我们先把所有图片的地址抓取下来  先观察一下url

我们往下滑动就可以看到每一个请求都是pn值 和PageNum值 会变 那我们只需要再爬取的时候吧这两个值变动一下就可以了 我们可以看到每一个请求只有30个数据 那么还需要进行处理一下

接下来我们就开始写代码

我们先把所需要的模块导入进来如下:

#  -*- coding:utf-8 -*-
# Author:Mr.屌丝import json
import os.path
from hashlib import sha1
import requests
from fake_useragent import UserAgent

然后我们创建一个类  先吧所需要的headers 头和url 初始化一下如下:


class BaiduSpider:def __init__(self):# 初始化一下 头部 把刚刚变动的数据改成大括号 便于后面传参  我们中间的很长的那些是一些中文字  可以再页面看到的 这里我就不多说了self.url = 'https://image.baidu.com/search/albumsdata?pn={}&rn=30&tn=albumsdetail&word=%E5%AE%A0%E7%89%A9%E5%9B%BE%E7%89%87&album_tab=%E5%8A%A8%E7%89%A9&album_id=688&ic=0&curPageNum={}'self.headers = {'User-Agent': UserAgent().random}

我这里还做了一个sha1加密功能函数  便于后期做增量 这里我是没有做的 只是应用于保存图片的名称

    def sha1(self, href):s = sha1()s.update(href.encode())return s.hexdigest()

接下来我们就开始爬数据了  第一个先爬取所以图片的源地址 代码如下:

    def parse_html(self, url):img_html = requests.get(url=url, headers=self.headers).text# 我们这里需要把数据转换成json格式的数据img_json = json.loads(img_html)print(img_json)def crawl(self):# 这里进行计算是应该我们看到有185个图片 一个请求只有30个 所以我们计算一下需要发送几个请求page = 185 // 30 if 185 % 30 == 0 else 185 // 30 + 1for number in range(page):pn = number * 30self.parse_html(self.url.format(pn, number))if __name__ == '__main__':baidu = BaiduSpider()baidu.crawl()

然后我们启动一下

然后我们打印一下抓取到的数据格式 如下:

可以看到这里有我们的图片url   我们需要把所需要的rul提取出来 代码如下:

    def parse_html(self, url):img_html = requests.get(url=url, headers=self.headers).text# 我们这里需要把数据转换成json格式的数据img_json = json.loads(img_html)# print(img_json)for href in img_json['albumdata']['linkData']:img_href = href['thumbnailUrl']# 我们提取出来之后打印一下rul print(img_href)def crawl(self):# 这里进行计算是应该我们看到有185个图片 一个请求只有30个 所以我们计算一下需要发送几个请求page = 185 // 30 if 185 % 30 == 0 else 185 // 30 + 1for number in range(page):pn = number * 30self.parse_html(self.url.format(pn, number))if __name__ == '__main__':baidu = BaiduSpider()baidu.crawl()

结果如下

可以看到我们这里的结果没有问题 接下来我们需要把这些链接的图片下载保存在本地了

需要再写一个函数方法 方便与以后修改 代码如下:

    def img_info(self, href):# 二级页面请求 下载图片html = requests.get(url=href, headers=self.headers).content# 进行一个sha1的加密sha1_r = self.sha1(href)# 创建一个保存图片的路径file = 'F:\Study\Spider\img\\'# 完整保存图片的链接filename = file + sha1_r + '.jpg'# 判断有没有这个保存图片的路径  没有则创建if not os.path.exists(file):os.mkdir(file)# 进行图片保存with open(filename, 'wb') as f:f.write(html)# 打印一下图片的信息print(filename)

 好了  代码到这里就结束了 可能我说的不太好  多谢体谅   

完整代码如下:

#  -*- coding:utf-8 -*-
# Author:Mr.屌丝
import json
import os.path
from hashlib import sha1
import requests
from fake_useragent import UserAgentclass BaiduSpider:def __init__(self):# 初始化一下 头部 把刚刚变动的数据改成大括号 便于后面传参self.url = 'https://image.baidu.com/search/albumsdata?pn={}&rn=30&tn=albumsdetail&word=%E5%AE%A0%E7%89%A9%E5%9B%BE%E7%89%87&album_tab=%E5%8A%A8%E7%89%A9&album_id=688&ic=0&curPageNum={}'self.headers = {'User-Agent': UserAgent().random}def sha1(self, href):# 进行sha1的加密s = sha1()s.update(href.encode())return s.hexdigest()def parse_html(self, url):img_html = requests.get(url=url, headers=self.headers).text# 我们这里需要把数据转换成json格式的数据img_json = json.loads(img_html)# print(img_json)# print(len(img_json['albumdata']['linkData']))for href in img_json['albumdata']['linkData']:img_href = href['thumbnailUrl']# 调用下载图片的函数 需要把图片的链接传参过去self.img_info(img_href)def img_info(self, href):# 二级页面请求 下载图片html = requests.get(url=href, headers=self.headers).content# 进行一个sha1的加密sha1_r = self.sha1(href)# 创建一个保存图片的路径file = 'F:\Study\Spider\img\\'# 完整保存图片的链接filename = file + sha1_r + '.jpg'# 判断有没有这个保存图片的路径  没有则创建if not os.path.exists(file):os.mkdir(file)# 进行图片保存with open(filename, 'wb') as f:f.write(html)print(filename)def crawl(self):# 这里进行计算是应该我们看到有185个图片 一个请求只有30个 所以我们计算一下需要发送几个请求page = 185 // 30 if 185 % 30 == 0 else 185 // 30 + 1for number in range(page):pn = number * 30self.parse_html(self.url.format(pn, number))if __name__ == '__main__':baidu = BaiduSpider()baidu.crawl()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32579.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(三)爬取一些网页图片

爬取一些网页图片 1、随机爬取一个网页: import requests# 1、获取图片网页源码 def Get_Source_Page():url https://pic.netbian.com/index.html# 当爬虫程序运行爬网站,若不设置header为任意一个名字,会被有些网站检查出是python爬虫&…

模拟双色球

投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1 - 33选择;蓝色球号码从1 - 16中选择。 package com;import java.util.Random; import java.util.Scanner;public class Test {public static void main(String[] args) {// 1.随机一组中奖号码,6个红球号码不重复(1…

年轻人的第一支牙刷,“少年”国风定制,BYCOOMagic电动牙刷体验

刷牙是每个人每天必做的事,普通牙刷由于清洁力度不够,无法做到深层次刷牙清理,加上刷牙时间不足,因此大多数人属于敷衍式刷牙。欲善其事、先利其器,要想科学刷牙,电动牙刷必不可少,最近我就入手…

第三方ipad笔哪个牌子好用?ipad触控笔推荐平价

至于选择苹果原装的电容笔,还是平替的电容笔,要看个人的需求而定,比如画图用的,可以用Apple Pencil;比如学习记笔记用的,可以用平替电容笔,目前的平替电容笔无论是品质还是性能,都非…

咦?智能颈部按摩仪还能语音播报,快搞起来!

一、档位切换实现 1、档位实现原理 按摩仪共设置15个档位,可以控制按摩的力度,通过BOOST升压电路实现。 通过P8口产生PWM波,调节PWM输出的正占空比来实现升压,详细的硬件原理可参考硬件部分关于升压原理的介绍,具体数…

电动牙刷/洗牙器出口欧盟CE认证测试标准EN 60335

电动牙刷/洗牙器在这两年开始被很多厂家看中这块的发展,因为据调查了解到,电动牙刷比普通牙刷更能够清除牙菌减少牙龈,更好的做到了清洁的作用。 在欧美国家几乎所有的人都使用电动牙刷,是一款普遍流行的日用品,因此在…

oh-my-posh - 终端个性化工具 - 美化PowerShell / cmd - 好物分享,真香~

一. 什么是oh-my-posh? Oh My Posh 是一款终端个性化工具,支持 Windows、Linux(WSL)、macOS 系统上的 PowerShell、bash、zsh 等终端,可以配置不同主题达到个性化的效果。 本篇文章,将以PowerShell终端为例&#xff0…

酷科技 | Amabrush电动牙刷:10秒就可以完成刷牙

刷牙是我们每天都要做的事情,虽然整个过程不过两三分钟,但无论是早上急急忙忙的起床,还是晚上困意来袭,忘记刷牙或者随便糊弄一下,已经成为了很多人经常会做的事情。 牙齿的健康很重要,因此刷牙这件事虽小但…

PaddleSpeech 流式语音识别系统 PP-ASR

(以下内容搬运自 PaddleSpeech) PP-ASR 目录 1. 简介2. 特点3. 使用教程 3.1 预训练模型3.2 模型训练3.3 模型推理3.4 服务部署3.5 支持个性化场景部署 4. 快速开始 1. 简介 PP-ASR 是一个 提供 ASR 功能的工具。其提供了多种中文和英文的模型,支持模型的训练&a…

飞利浦 PHILIPS 电动牙刷HX6730 拆解

今日,一直比较喜欢用的电动牙刷,飞利浦HX6730坏掉了,初步感觉考虑飞利浦的保修,但是发现发票找不到了。飞利浦的客服也说,电动牙刷的两年保修依据分别是:1、发票开据日期;2、在无发票的情况下&a…

CES Asia:藏在儿童电动牙刷里的科技

科技巨头苹果公司常常对外表达的观念是,产品的核心是使用者,科技是用来解决问题,让产品设计得能帮助使用者生活得更美好,科技要做的是帮助人们拥有完成原本无法做到的事的能力。苹果公司认为科技应当藏身幕后,而不是走…

两款黑科技、高颜值电动牙刷正面PK,如何选择性价比是关键

随着人们生活水平的提升,近年来,各种黑科技层出不穷,对我们的生活带来了巨大的改变,甚至可以说是“武装到了牙齿”——例如目前不少厂商推出了智能声波电动牙刷(以下简称:电动牙刷),让刷牙也变得极具科技感。 目前市面上的电动牙刷品牌众多、鱼龙混杂,但在性能、质量…

WTV380语音芯片在儿童电动牙刷应用,可降低企业30% BOM成本!

概述:儿童电动牙刷控制的组成,需要一颗丰富资源的MCU芯片,主要起到按键信号采集、压力传感器信号采集、电机控制、音乐/提示功能,而需要实现电动牙刷的这些功能,产品开发设计工程师需要用到一颗IO资源丰富,…

2021年中国电动牙刷销售及发展趋势分析:国产品牌崛起[图]

一、电动牙刷产业链 电动牙刷是利用振动的机芯带动刷头旋转或振动以达到洁牙的效果。电动牙刷产业链随着市场产品的不断推出,产业链生态逐步完善,推动市场稳步发展。电动牙刷上游主要是牙刷丝、塑料外壳材料和电机、电池等,中游各类别电动牙刷…

文华财经数据导出工具

软件用于文华财经数据的格式化导出,通过简单设置文华财经的安装路径即可。当第一次打开工具时,出现文华财经的安装路径设置。请点击浏览并定位到文华财经的安装目录,如:D:\Tools\wh6通用版,确认后进入主程序。 第二次更…

如何用python爬取新浪财经

通过python爬取新浪财经的股票历史成交明细 要求 通过新浪财经爬取历史数据:http://market.finance.sina.com.cn/transHis.php?symbolsz000001&date2021-04-27&page60 要求:输入日期和股票代码后将一天所有的记录存入一个csv文件,…

文华财经期货K线多周期画线技术,多重短线技术共振通道线指标公式——多周期主图自动画线

期货指标公式是通过数学逻辑角度计算而来,仅是期货分析环节中的一个辅助工具。期货市场具有不确定性和不可预测性的,请正常对待和使用指标公式! 期货指标公式信号本身就有滞后性,周期越大,滞后性越久。指标公式不是100%稳赚的工具…

文华财经期货指标短线精灵,期货多空信号5分钟K线战法短线操作技巧

期货指标公式是通过数学逻辑角度计算而来,仅是期货分析环节中的一个辅助工具。期货市场具有不确定性和不可预测性的,请正常对待和使用指标公式! 期货指标公式信号本身就有滞后性,周期越大,滞后性越久。指标公式不是100%稳赚的工具…

文华财经指标公式源码学习

HJ_1:(HHV(HIGH,36)-CLOSE)/(HHV(HIGH,36)-LLV(LOW,36))*100; HJ_2:SMA(HJ_1,3,1); HJ_3:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; HJ_4:SMA(HJ_3,5,1)-8; 常态能量监控:HJ_4-HJ_2,COLORYELLOW,LINETHICK0; 狂飙临界能量:HJ_4-HJ_2,COLORRED,LINETHICK0; 0; STICKLIN…