今日鸡汤

美丽的蓝图落在懒汉手里,也不过是一页废纸。

今天我们要爬取糗事百科中的图片,网站

案例分析

我们做爬虫首先需要找规律,在这其中最喜欢的就是分页栏了。有分页栏就代表当你按下一个页码的时候,HTML 页面会发起请求。有请求就肯定有数据,有数据就一定能抓到。

好,接下来回归正题~

我们打开这个网站,快速的将滚动条拖动到最下面,看到了我们最喜欢的分页栏

接下来我们打开浏览器抓包工具,观察浏览器地址栏,分析是否为异步请求。

简简单单同步请求,肯定用了 get 方法,既然为同步请求,我们就需要解析 HTML 页面,获取每个 img标签中的 src 属性。

接下来继续观察浏览器地址栏中的规律,当我们在第一页的时候为
https://www.qiushibaike.com/imgrank/ 这个地址。
我们切换至第二页为 https://www.qiushibaike.com/imgrank/page/2/ 这个地址。
这其中有些规律。那将最后的数字改为 3 访问到的页面就是第三页。

好啦,html 跳转的规律和 HTML 请求方式,我们都已经知晓。

接下来解析 HTML 页面,在浏览器中右击查看桌面源代码。

然后使用开发者工具中的元素定位,定位一张图片。


上图中红框框出的部分为图片的 url 地址,绿框中为图片预览。可以将 url 复制下来到页面源码中分析。

在源码中的位置我们知道了,接下来只需要使用一种技术获取到就可以啦。
可选的技术有:

  • xpath
  • bs4
  • 正则

这里我选择正则,因为每个 img 标签的相似度极高,可以批量使用。
如下图所示:

图中红框的部分为相同部分,绿框部分为不同部分,橙底为背景的为我们要取出的部分。

这里需要注意,获取的 src 属性需要添加 https: 前缀。

好啦,分析完毕啦,接下来 Let’s Coding~

开码

  • 第一步:导入所需模块
  • 第二步:用户输入爬取第几页的内容,或者定义爬取多少图片
  • 第三步,设置 url
  • 第四步:发请求
  • 第五步:解析返回数据
  • 第六步:保存图片

引入 requestsreos

标题中的三个模块分别为:请求模块,正则表达式模块,系统模块

import requests, re, os

创建文件夹

# 判断存图片的文件夹是否存在
if not os.path.exists('./imgs'):os.mkdir('./imgs')

用户动态指定爬取图片

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
url = 'https://www.qiushibaike.com/imgrank/'
# 由用户控制爬取第几页的内容
url = url+'page/'+input('想爬取第几页?')

发请求并解析数据

respones = requests.get(url = url, headers= headers).text
# 正则规则,.*?为任意内容,(.*?) 为取出的内容,其中可以为任意内容
ex = '<div class="thumb">.*?<img src="(.*?)" alt="'
# 数据清洗,获取图片的地址,数组形式
urls = re.findall(ex,respones,re.S)

为获取的图片链接发请求并存储图片

for i in range(0,len(urls)):#为每个图片添加https前缀urls[i] = 'https:'+urls[i]#发请求img = requests.get(url = urls[i],headers=headers).content# 解析图片名称img_name = str(urls[i]).split('/')[-1]with open('./imgs/'+img_name,'wb') as fp:fp.write(img)print(img_name+'保存成功!')

完整代码

import requests,re,os
#引入 os 模块方便文件夹操作if __name__ == '__main__':# 判断存图片的文件夹是否存在if not os.path.exists('./imgs'):os.mkdir('./imgs')headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'}url = 'https://www.qiushibaike.com/imgrank/'# 由用户控制爬取第几页的内容url = url+'page/'+input('想爬取第几页?')# response中为网页源码respones = requests.get(url = url, headers= headers).text# 正则规则ex = '<div class="thumb">.*?<img src="(.*?)" alt="'# 数据清洗,获取图片的地址urls = re.findall(ex,respones,re.S)for i in range(0,len(urls)):#为每个图片添加https前缀urls[i] = 'https:'+urls[i]#发请求img = requests.get(url = urls[i],headers=headers).content# 解析图片名称img_name = str(urls[i]).split('/')[-1]with open('./imgs/'+img_name,'wb') as fp:fp.write(img)print(img_name+'保存成功!')

不会哄女朋友?来,教你爬搞笑图片相关推荐

  1. 我用python爬情头,来哄女朋友开心

    我用python爬情头,来哄女朋友开心. 1.资源来自:www.woyaogexing.com/ 我要个性网址 这是我爬了一个多小时的成果 话不多说上代码! import timeimport req ...

  2. 情人节,数学教你如何科学地哄女朋友?

    公众号内回复"哄女朋友"下载本文 PDF 版.请滑动或横屏查看长公式. 背景 马上又到情人节了,又是一年一度哄女朋友的好日子!然后却有很多男模友都向我述苦,不知道该如何哄女朋友.女 ...

  3. ChatGPT 大智近妖,从宇宙人生到手搓光刻机,从哄女朋友到写年终总结我们聊得非常开心,反而让人越来越忧心...

    都说 ChatGPT 要干掉程序员,清理搜索引擎,取代Stack Overflow,还能消灭人类,这些有些言过其实了.ChatGPT 的定位是一个人工智能助理,它说,它的主要目的是通过回答用户的问题, ...

  4. 七夕节,程序员们都怎么哄女朋友开心?

    大家好,马上就七夕节了,七夕节是牛郎织女鹊桥相会的相会的日子. 这篇文章的前提是,你得有个女朋友,没有就先收藏着吧! 一.七夕节的由来 七夕节的来源是梁山伯与祝英台的美丽传说,化成了一对蝴蝶~ 美丽的 ...

  5. python 获取窗口句柄_Python如何自动化哄女朋友

    众所周知,哄女朋友开心是世界性的难题,那么该如何解决呢?或许可以尝试借助Python来实现自动化操作! 当女朋友说自己不舒服的时候,作为一个老实人当然是跟她讲多喝热水啦,但讲一遍多喝热水显然不足以显示 ...

  6. HDU 3236 Gift Hunting (程序猿的哄女朋友方式)

    哄女朋友开心的错误示范. 题意:你和你女朋友(不,你没有)去购物,你有两个购物券v1,v2,不能叠加使用,所购买的礼物的和不超过券的值就可以买,你女朋友过生日,可以免费带走一个礼物.礼物有价格p和女朋 ...

  7. 学计算机了情话,二十句哄女朋友的情话 每句都很管用

    在认识你之后,我才发现自己可以这样情愿的付出.今天小编为大家整理了哄女朋友的情话,希望大家喜欢. 1.你就像一碗汤,让我的心永远不会凉. 2.纵然世间任我挑,我的选择仍是你. 3.情是心中的向往,是感 ...

  8. 【爬虫】Yhen手把手教你爬取表情包,让你成为斗图界最靓的仔!

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,转载请说明出处,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/art ...

  9. 实战 | 使用 Python 哄女朋友

    0. 前言 本文首发于公众号:可乐python说 昨天,和一位朋友聊天,他说最近准备学习 Python 这门编程语言,问我学完 Python 能做哪些事情. 正好,最近他女朋友有点闷闷不乐,他也寻思着 ...

最新文章

  1. BZOJ 2144 跳跳棋(神仙建模题,倍增 LCA,二分)【BZOJ修复工程】
  2. 带有128KB缓存的AD7606模拟采集板
  3. 强大的独立日期选择器(date picker)插件 - Kalendae
  4. gp数据库迁移数据到mysql_greenplum数据迁移
  5. 数据结构之红黑树(三)——删除操作
  6. TCP的带宽估计和丢包恢复
  7. 医疗中文问句意图匹配Top3方案ppt
  8. C# WinForm 开软件窗口居中 任意时刻窗体居中
  9. 怎样在php中制作电子相册,如何制作纪念电子相册
  10. 需求分析岗的一点总结
  11. PS自定义形状+笔刷添加打造完美水印
  12. android o bln-al10,bln-al10是什么手机型号 bln-al10是啥手机型号
  13. 当遇到火狐浏览器“建立安全连接失败”问题,处理方法
  14. h5公众号分享朋友、朋友圈
  15. postgresql学习(一)
  16. 文学阅读---菜根谭(1)
  17. Adobe XD和Sketch,谁才是王者?
  18. Spring Integration
  19. Delphi下POS打印机,控制开钱箱,客显,顾客显示屏,小票打印机
  20. Multisim 7位数码管

热门文章

  1. 计算机二级程序设计提交,程序设计方法与风格(计算机二级复习指导)
  2. php球半径为2的圆面积,某竖直平面内有一半径为R的光滑固定圆环,斜边长2R、短边长R的匀质直角三角板放在环内,试求三角板在其平衡位...
  3. educoder:实验七 元组和集合
  4. Python学习记录(一)
  5. Bixby在中国市场上线,三星推动智能手机全面跨入AI时代
  6. 程序员 不经历风雨,怎么见彩虹
  7. python中迭代_python中的迭代什么意思
  8. [ACM]辽宁省赛2010 (HZNU 1081-1089)
  9. easyExcel自定义背景颜色easyPoi自定义修改表头背景色
  10. 带你了解微信代运营公众号到底怎么做