一、抓取首页图片

静态页面

流程:

1.1、找到目标数据

这里用狗的图片来举例,接下来我们就要分析然后爬取这个页面所有狗的图片的规律

1.2、分析请求流程

先访问page页获取网页的源代码

# 网页的URL地址
url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1623639077275_R&pv=&ic=0&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E7%8B%97'
#添加请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}
#访问page页面   获取网页源代码
res = requests.get(url,headers=headers)
print(res.text)

可以观察到网页源代码的提取并不完整,因此我们可以按“F12”——NetWork——ALL——Name(排在第一个)查看到请求头,把所有的请求头内容复制到代码里(一般反爬我们有User-Agent就行,不行我们就把所有的请求头加进去)

但是,每个都要改写成键值对形式有点麻烦,这里有个小技巧;
我们可以在pycharm上新建一个py文件,然后把复制的请求头放进去,按“Ctrl+R”——勾选“Regex”(这里可以让我们使用正则方式修改我们需要的内容),这样就能获取到网页的源代码了。

1.3、提取数据

我们先找随机找一张图片右击“复制图片地址”,然后在网页空白部分右击“查看网页源代码”,在网页源代码页面“Ctrl+F”查看它在网页源代码里是如何显示的;

同理我们可以多找几张图片来进行比较,通过对比可得知图片加载格式有 3 种方式(找到图片之间的规律了):"thumbURL":"xxx.jpg""middleURL":"xxx.jpg""hoverURL":"xxx.jpg",接下来我们就可以通过正则表达式获取到图片的 URL 地址了,最后通过循环就可以爬取到该页面的图片了。

1.4、完整代码

import requests
import re
import os# 网页的URL地址
url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1623639077275_R&pv=&ic=0&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E7%8B%97'
#添加请求头
headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Cookie": "BDIMGISLOGIN=0; winWH=%5E6_1280x578; BDqhfp=%E7%8B%97%26%260-10-1undefined%26%260%26%261; BIDUPSID=88BFCA0DA519F42EA22F89F163D205C5; PSTM=1621005981; BAIDUID=88BFCA0DA519F42EAE9BD14C17C67F24:FG=1; __yjs_duid=1_435ea021e771bf48348cc6d1e442cb191622824721988; H_PS_PSSID=31253_26350; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; delPer=0; PSINO=6; BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; BAIDUID_BFESS=88BFCA0DA519F42EAE9BD14C17C67F24:FG=1; firstShowTip=1; cleanHistoryStatus=0; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; BDRCVFR[tox4WRQ4-Km]=mk3SLVN4HKm; BDRCVFR[CLK3Lyfkr9D]=mk3SLVN4HKm; indexPageSugList=%5B%22%E7%8B%97%22%2C%22%E6%A2%A6%E7%90%AA%22%5D; ab_sr=1.0.1_ODM0ZmQ5MDFiNzQ3MzE4NzIyMDg2MWU5NTg5MDgzNmY4OTFhODgwYjUwOWYzZGZiYjZlMTQ4YWNhZjdlMDJiMDM1YmY0NjljZDljMmU5YzM0ZDZhNWYwODIyZWFkZWZkNjcwNjFmM2UxZmU1M2NjOGQxZjc3NGNmNWE5NjA2NWVlMzhiMTlkM2IyNzBlOTgyNDBjMDhjZmEyZDFjM2QyOQ==",
"Host": "image.baidu.com",
"sec-ch-ua": '" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"',
"sec-ch-ua-mobile": "?0",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}
#访问page页面   获取网页源代码
res = requests.get(url,headers=headers)
#提取数据   狗图片url
urls = re.findall('"thumbURL":"(.*?)"',res.text)# 创建存放的图片文件夹
if not os.path.exists('images'):os.mkdir('images')
#url发起请求,获取图片数据
for index,img_url in enumerate(urls):# 若图片的地址中存在\\则替换掉if '\\' in img_url:img_url = img_url.replace("\\","")res = requests.get(img_url)  #res 包含  狗图片数据#图片下载位置、及图片名称picname = './images/'+'cat'+ str(index) +'.png'print(picname)with open(picname,'wb') as f:f.write(res.content)

结果:


二、抓取多页图片

还是以狗的图片为例,当我们鼠标往下滑的时候,我们会发现会有图片不断加载出来,其实这已经是加载到下一页了。那如果我们不仅想爬第一页图片,还想爬第二页、第三页呢?

2.1、分析请求流程

构造page页,即找到多个page页之间的规律

首先,按“F12”——点击“NetWork”——点击“XHR”,然后随着鼠标滚轮不断的往下,我们可以看到各个页面的网页源代码被加载出来。

接下来我们可以复制几个网页页面的URL地址进行比价找出它们之间的规律

https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8353138729825372156&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%8B%97&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E7%8B%97&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn=90&rn=30&gsm=5a&1623720170654=
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8353138729825372156&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%8B%97&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E7%8B%97&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn=120&rn=30&gsm=78&1623720170795=

(这里我只列举了两个,要比较的话最好多找几个)通过比较我们可以看出只有后面部分存在差异,&pn后数值相差是 30 的倍数,其他的数值差异不影响结果(这个有兴趣的可以自己去尝试),因此我们就可以通过修改 &pn 后的值来获取多个网页

&pn=120&rn=30&gsm=78&1623720170795=  #就&pn开始往后存在差异

接下来,就是找一个网页进行图片分析(这里 分析过程上面已经讲了)

2.2、完整代码

import requests
import re
import osheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}def getimg(urls,filename):"""功能:获取百度图片,存储到文件夹参数:img_urls:图片url列表filename:图片存储文件夹"""for index,img_url in enumerate(urls):if '\\' in img_url:img_url = img_url.replace('\\',"")# url发起请求,获取图片数据res = requests.get(img_url, headers=headers)picname = filename+'/'+'dog'+str(index)+'.png'print(picname)with open(picname,'wb') as f:f.write(res.content)for i in range(1,4):url = "https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8443544291319646945&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%8B%97&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E7%8B%97&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={0}&rn=30&gsm=1e&1623687251585="index = i*30url = url.format(index)res = requests.get(url,headers=headers)#提取数据   狗图片urlimg_urls = re.findall('"thumbURL":"(.*?)"',res.text)# 创建存放的图片文件夹filename = 'dog'+str(i)+'.png'if not os.path.exists(filename):os.mkdir(filename)getimg(img_urls,filename)

结果:

爬虫学习笔记(二)——使用 requests 爬取百度图片相关推荐

  1. 爬虫学习笔记-猫眼电影排行爬取

    爬虫学习笔记-猫眼电影排行爬取 1 分析页面 https://maoyan.com/board/4 点击页码发现页面的URL变成: 初步推断出offset是一个偏移量的参数,当页面为第一页时offse ...

  2. 爬虫学习笔记(用python爬取东方财富网实验)

    参考文章以及视频:(11条消息) 爬虫实战 | 爬取东方财富网股票数据_简说Python的博客-CSDN博客.手把手教你从东方财富网上获取股票数据_哔哩哔哩_bilibili.[Python爬虫案例] ...

  3. Python学习笔记(65)~ 爬取百度首页标题

    爬取百度首页标题 Demo #!/usr/bin/python3 import re from urllib import request#爬虫爬取百度首页内容 data=request.urlope ...

  4. python爬虫学习笔记(一)—— 爬取腾讯视频影评

    前段时间我忽然想起来,以前本科的时候总有一些公众号,能够为我们提供成绩查询.课表查询等服务.我就一直好奇它是怎么做到的,经过一番学习,原来是运用了爬虫的原理,自动登陆教务系统爬取的成绩等内容.我觉得挺 ...

  5. 【Python3 爬虫学习笔记】用PySpider爬取虎嗅网并进行文章分析

    –转自<1900-高级农民工>http://www.makcyun.top 安装并运行pyspider 安装pyspider pip3 install pyspider 运行pyspide ...

  6. python爬取京东手机数据_Python数据爬虫学习笔记(21)爬取京东商品JSON信息并解析...

    一.需求:有一个通过抓包得到的京东商品的JSON链接,解析该JSON内容,并提取出特定id的商品价格p,json内容如下: jQuery923933([{"op":"75 ...

  7. Python数据爬虫学习笔记(11)爬取千图网图片数据

    需求:在千图网http://www.58pic.com中的某一板块中,将一定页数的高清图片素材爬取到一个指定的文件夹中. 分析:以数码电器板块为例 1.查看该板块的每一页的URL: 注意到第一页是&q ...

  8. Python3爬虫学习笔记——xpath练习之爬取起点网玄幻小说排行

    这次看完xpath章之后巩固练习 import re import requests from lxml import etree def get_one_page(url):headers = {' ...

  9. Python数据爬虫学习笔记(3)爬取豆瓣阅读的出版社名称数据

    需求:写一个Python程序,实现获取豆瓣阅读网页上的所有出版社名称,并储存在指定路径的txt文件中,如下: 准备:观察该网页的源代码,注意到每个出版社名称都由固定格式的div所包裹,如下: 编写代码 ...

最新文章

  1. 查询远程或本地计算机的登录账户
  2. php cpu使用率,如何减低php程序的cpu使用率?
  3. MyClouds-V1.0 发布,微服务治理及快速开发平台
  4. TensorFlow 基本操作
  5. C++轻量级微服务_微服务技术栈:API网关中心,落地实现方案
  6. 关于元素绝对定位的父元素问题
  7. [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
  8. 使用ztree展示树形菜单结构
  9. MapReduce框架下的FP Growth算法详解
  10. SpringCloud 应用在 Kubernetes 上的最佳实践(二):部署篇 (开发部署)
  11. 【风电功率预测】基于matlab粒子群算法优化LSTM风电功率预测【含Matlab源码 941期】
  12. linux如何复制代码不乱码,网上复制代码要小心,很可能会带入乱码字符
  13. 图灵奖得主亲授!深度学习视频课程精选
  14. 七月阅读:《刘慈欣科幻短篇小说集Ⅰ》笔记
  15. 万里长城这么修,可真鹅戏
  16. 如何部署一个属于自己的网站
  17. 【风马一族_php】NO5_php基础知识_数组
  18. 【从零开始学深度学习编译器】十四,MLIR Toy Tutorials学习笔记之部分Lowering
  19. 用php语句绘制圆锥,JS、canvas画一个圆锥实现代码
  20. Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失

热门文章

  1. 114. Leetcode 53. 最大子数组和 (动态规划-子序列问题)
  2. 67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)
  3. Leetcode 54 螺旋矩阵 (每日一题 20210729)
  4. XGBoost相关知识-2
  5. 深度学习核心技术精讲100篇(四十三)-人工智能新技术-知识普及篇:一文带你深入认识下联邦学习的前世今生
  6. 偏差/方差、经验风险最小化、联合界、一致收敛
  7. python反转列表_python列表反转
  8. QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
  9. 阿里巴巴机器学习系列课程
  10. 服务端高并发分布式架构演进之路【转】