Python编程:15行代码下载“石墨烯”图片!

1 了解爬虫

Python语言是一门强大的编程语言,它被广泛应用于科学计算、科学绘图、大数据挖掘、大数据图像化可视化、机器学习、人工智能等领域。

在科研工作中,除了科学计算与绘图以外,Python语言可以用来编写小小的“网络爬虫”程序,挖掘大数据,并应用于学习和科研。例如,可以利用Python编程自动查阅并下载某一领域、某一关键词的相关文献(当然可以设置搜索条件,例如搜索10分以上的期刊文献),用于个人的学习和科研(满足著作权法规定的“合理使用”条件)。

提到“网络爬虫”,很多人可能认为是一个“不光彩”的事情,因为它可能要在别人的网站上“扒”数据。其实不然,我们所熟知的百度、谷歌等搜索引擎实质上是高级的爬虫系统。

2 爬虫能为我们做什么

“网络爬虫”通俗讲是一种自动化的机器人软件,模拟人工浏览网页的方式,全自动快速获取想要的文本信息或下载想要的文件(图片、视频、论文PDF等)。具体地,利用“爬虫”可以帮我们做以下事情:

(1)批量搜索、下载包含某些个关键词的论文;

(2)调研某个行业的数据,用于机器学习或理论分析;

(3)分析某支股票的长期走势,以决定是否要入股;

(4)调查大量针对某个商品的评论,以决定是否要下单;

(5)分析大量针对某部电影的影评,以决定是否要跟朋友去观看。

这时候,爬虫便是我们快速获取这些资源的一条有效途径,能为决策者提供一种精准的决策方案。

如果我想在决定是否陪儿子一起看《Bomble Bee》电影之前,自己先编写一段爬虫程序,分析一下影评如何,再决定去否,我想这一定会伤害小朋友的心的!事实上,各大影评网站都已经这样做了,甚至“懂”你的喜好,推送你感兴趣的电影。

你是否上瘾抖音,欲罢不能?因为,抖音最“懂你”!

那么编写“爬虫”做数据分析有什么用?对于精准推送、大数据分析是非常有用的。数据挖掘、大数据分析是机器学习、人工智能的前提基础。新时代,挖掘的大数据是能够提高生产力的、具有巨大增值价值的生产要素!在过去,不少人认为“读书无用”、“知识贬值”,但是在大数据和人工智能飞速发展的今天,笔者认为大数据、人工智能可以创造倍增的“知识经济”!

3 怎样合法利用爬虫

任何事情都有两面性,都是“双刃剑”。数据挖掘技术以及爬虫软件本身不是坏的事物。关键在于应用这些技术的“人”,法律意识、版权意识淡薄的使用者,很容易触碰“红线”。目前,已有不少公司或个人因此受到法律的制裁。

那么怎样“爬取”才合法?笔者认为应该注意以下几点:

(1)政府或金融网站数据不能爬;

(2)网站申明“robots.txt”君子协定的条款内容不要爬;

(3)著作权法中“合理使用”规定以外的相关内容不要爬;

(4)网站后台的、非公开的、需付费的数据不能爬;

(5)用于交易目的数据不能爬。

上述提到的“君子协定”,是以文本形式申明的条款,保存在域名根目录下的“robots.txt”文件。下图是百度网站的“君子协定”申明的内容,告诉“机器人”爬虫哪些允许/不允许爬取。

https://www.baidu.com/robots.txt

Python编程:15行代码下载“石墨烯”图片!

君子协定是数据拥有者不希望其服务器上某些文件夹下的数据被挖掘而对公众发布的申明,也是对侵权行为申诉的一个依据。也有不少网站并没有设置robots.txt。不管怎样,非申明的内容在合理合法的前提下是可以爬取的。

4. Python编程实现图片下载的实例

下面利用Python语言的第三方库requests,采用少量的代码即可实现强大的下载功能。在展示Python代码之前,要感谢一下requests库的作者:Kenneth Reitz。他是一位富有传奇色彩的程序员大咖!想必不只是程序猿们的偶像!(ps: 本来已经拼好了几张百度下载的他的个人照,但再三考虑,为了不侵犯肖像权,还是放弃了贴他的帅照。)

言归正传,下面讲解爬虫挖掘图片的代码。

程序需要用到正则表达式和requests库,所以在程序开头引入re和requests两个库:

import re

import requests

利用百度输入“石墨烯”搜索图片。认真旁观的儿子不让搜索这个鬼玩意儿,说搜索“小黄人”!好吧,我们输入“小黄人”,搜索后浏览器显示了找到的前30张图片。点击地址栏网址“复制此网址”,这个搜索结果的网页网址就是我们爬虫需要发送请求的网址url,将该网址存入page_url。

然后设置报文headers,这个是告诉请求的服务器,我不是机器人,我是一个浏览器!headers信息可以在浏览器中按“F12”点击“Check”或“审查元素”即可复制headers相关报文信息以及该网页使用的请求方法(get或post)。

headers = {

'User-Agent': 'Mozilla/5.0 (windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/53.0.2785. 143 Safari/537.36'

}

利用下面的代码将该网页的html代码存入一个变量res:

res = requests.get(page_url, headers= headers)

审查元素后发现,图片的url都是JS生成的,找到"thumbURL":"/……0.jpg"内容,发现图片地址都在thumbURL键值对中。利用正则表达式挖掘 "thumbURL":"与"之间的字符串,采用(.*?)非贪婪模式匹配需要挖掘的字符串。

img_urls = re.findall(r'"thumbURL":"(.*?)"', res.text, re.S)

式中,re.S表示扩展整个字符(包括换行符 ),可以挖掘包括换行符在内的的段落文本信息。

img_urls中存入的是该网页中所有搜索图片的网址url列表。采用for...in...遍历列表,逐条读取url。for循环体代码如下:

for index, img_url in enumerate (img_urls):

try:

img_file_name = '小黄人-%s.%s' % (index, img_url.split(',')[-1].split('.')[1])

img_res = requests.get(img_url, headers=headers)

with open('pic/' + img_file_name, 'wb') as f:

f.write(img_res.content)

except:

continue

上述循环体中,采用try...except容错,避免意外崩溃。采用requests.get请求每一张图片的网址img_url,采用f.write将得到的图片二进制数据流img_res.content写入重命名的图片文件中。img_file_name是对图片重新命名,其中采用.split(‘,’)[-1]获取原文件名,再利用.split('.')[1]获取图片文件的扩展名(.jpg或.png)。

运行程序,其下载图片的过程演示动画如下:

Python编程:15行代码下载“石墨烯”图片!

爬取的“小黄人”图片文件如下:

Python编程:15行代码下载“石墨烯”图片!

程序中,将图片搜索结果网页网址page_url字符串中的

“word=%E5%B0%8F%E9%BB%84%E4%BA%BA”

修改为“word=graphene”,将图片重命名img_file_name变量中的“小黄人”修改为“graphene”,运行程序,图片下载的结果如下:

Python编程:15行代码下载“石墨烯”图片!

5 总结

对于文本挖掘(Text Mining)、资源下载(视频、软件、PDF等文件)均可以参照本文中的算法与代码实现。

利用大数据思维、大数据挖掘与分析技术,为学习、工作、科研甚至是产品营销等提供精准、高效的决策方法,达到事半功倍的效果。

进群:960410445 即可获取书十套PDF!

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/86535866