Python爬虫入门:批量爬取网上图片的两种简单实现方式——基于urllib与requests

Python到底多强大,绝对超乎菜鸟们(当然也包括我了)的想象。近期我接触到了爬虫,被小小地震撼一下。总体的感觉就两个词——“强大”和“有趣”。今天就跟大家分享一下两个简易的爬虫案例,大牛们请飞过哈。

先来科普一下啊“爬虫技术”吧。网络爬虫(又被称为网页蜘蛛,网络机器人,网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

它的名字虽然很多,但是过程很明确,就两个部分:一是从网页源代码中爬取有用信息;二是对这些信息进行处理(如分析、下载等)。

下面用两种方法制作批量爬取网络图片的方法。

第一种方法:基于urllib实现

要点如下:

1.url_request = request.Request(url)

2.url_response = request.urlopen(url) 或者 url_response = request.urlopen(url_request)

3.data=url_response .read().decode('utf-8')

4.jpglist=re.findall(正则表达式,data)

5.request.urlretrieve(jpgUrl,'%s.jpg' %n)   #下载,第一个参数网址,第二参数名称

第一个案例,我们爬取了猫扑上的一个网页上的图片,案例代码如下。

基于urllib案例完整代码

需要说明的是代码request.urlretrieve(each,'pic2\\%s.jpg'  %n)中“pic2\\”代表下载的图片放置在提前建好的文件夹pic2里。运行代码结束之后IDLE和最后结果如下图所示。

代码运行界面1

案例1结果

第二种实现方法:基于requests实现

要点如下:

1.data=requests.get(url).text

2.jpglist=re.findall(正则表达式,data,re.S)

3.pic=requests.get(pic_url,timeout=10)

4. fp=open(pic_name,'wb')

    fp.write(pic.content)

    fp.close()

在这个案例中我们爬取了一个壁纸网站的网页,预测应该图片质量比较高吧。完整代码如下:

基于requests案例代码

我们来看一下运行代码的结果,如下图所示。真心不错,我们获得了42张壁纸,而且是在短短几秒钟内完成的,很厉害的感觉有木有。

代码运行界面2

案例二结果

改进一下

下面我们进行一个改进,输入关键词直接自动下载相关图片(创意参考了https://www.jianshu.com/p/19c846daccb3)。

需要说明一下原理。这个针对百度图片搜索功能完成的,因为我们发现关键词就在搜索结果页的网址中。我们只需要把网址中的关键词换掉,就是针对新的关键词的结果页网址。

完整代码如下:

改进后代码

这里我输入了“北京”,如下图。结果针对让人振奋,自动下载了59张关于北京的图片,有没有很爽的感觉。

代码运行界面3

案例三结果

参考学习网址:

1.https://blog.csdn.net/appleyk/article/details/78070098

2.https://blog.csdn.net/csdn2497242041/article/details/77170746

3.https://www.cnblogs.com/SneakyCrab/p/5905804.html

4.https://www.jianshu.com/p/19c846daccb3

5.https://www.jianshu.com/p/74b94eadae15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

多研究些架构,少谈些框架(3)-- 微服务和事件驱动

接上篇,我们采用了领域驱动的开发方式,使用了充血模型,享受了他的好处,但是也不得不面对他带来的弊端。这个弊端在分布式的微服务架构下面又被放大。 事务一致性 事务...

3764
来自专栏纯洁的微笑

几种分布式调用链监控组件的实践与比较(二)比较

引言:继上篇《几种分布式调用链监控组件的实践与比较(一)实践》后,本篇将会讲下几种APM选型的比较与性能测试。

2602
来自专栏北京马哥教育

LinkedIn —— Apache Kafka 的伸缩扩展能力

什么是Kafka? Apache Kafka是一个演进的发布/订阅消息系统。系统结合队列和消息机制,可把它当成在一群服务器间进行的日志提交过程。消息被分成...

3094
来自专栏PPV课数据科学社区

干货 | TensorFlow 技术与应用(内附31页PDF下载)

各位亲们:PPV课给大家准备了一场“TensorFlow 技术与应用”干货盛宴,全文下载(PDF 31页)请在微信对话框回复“508”,获取下载链接。 ? ? ...

3658
来自专栏Java架构沉思录

微服务等于Spring Cloud?一文告诉你微服务到底是什么。

首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。

922
来自专栏AI星球

"一言蔽之系列"--简说SQL与NoSQL那些事

文章结构: 1、关系型数据库:ACID理论 2、非关型系数据库:分布式存储理论、CAP理论、BASE理论、优缺点、常用NoSQL数据库 3、Python链...

1153
来自专栏JAVA技术zhai

大话微服务架构的故障隔离及容错处理机制

8、限流器和负载开关(Rate Limiters and Load Shedders)

2542
来自专栏杨建荣的学习笔记

运维平台的建设思考-元数据管理(r7笔记第57天)

之前也写过一篇比较基本的文章,也算是自己对运维平台的一个基本思考。运维平台的建设思考(r6笔记第20天) 当然想法简单,而且缺乏实践,但是朝着这个方向迈进是没有...

4495
来自专栏社区的朋友们

浅聊 API 网关

在微服务概念流行之前,API 网关的就已经诞生了,如银行、证劵等领域常见的前置机系统,解决访问认证、报文转换、访问统计等;而我今天的切入点是从 API-cent...

1.5K2
来自专栏MongoDB中文社区

来自MongoDB的新年大礼: MongoDB 4.0将正式支持ACID事务!

MongoDB CTO Eliot Horowitz 刚刚于2月16日凌晨在MongoDB西雅图大会上宣布(当地时间2月15日上午),MongoDB将在4.0版...

1981

扫码关注云+社区

领取腾讯云代金券