前言:2018年,Python语言紧随C语言、java的脚步,被广大IT程序猿所熟知,无论是从入门级选手到专业级数据挖掘、科学计算、图像处理、人工智能,Python 都可以胜任。
最近闲暇之余小编学习了Python中简单的网络爬虫技术来爬取网站图片,现在就来给大家分享一下,以下有两个版本,为测试版和控制台版本(两个版本都做了详细的注释):
测试版:
一、.明确网络爬虫技术的编写步骤:
确定要爬取的网址→ 根据网址获取爬取网站的源代码→用正则表达式配置路径→保存到本地
二、开始编写代码
我们先导入两个需要用到的模块
import urllib.request #导入适用于3.0的爬取网页数据的核心模块
import re #匹配器 (下面用于编译字符串)入代码片
1.输入要爬取的网址
#定义变量path保存网址
path="http://www.budejie.com/"
2.根据网址获取网站源代码
#定义变量content,根据网址获取源代码
content=urllib.request.urlopen(path).read()
#括号第一个引号是解码(请根据爬取网址的编码格式设定,这里小编爬取网址的编码格式是“UTF-8”) ,第二个是忽略不可解的非法字符
content=content.decode("UTF-8","ignore")
3.用正则表达式配置匹配的图片路径
#定义一个变量imgRe,保存正则表达式
imgRe=re.compile(r'data-original="(.+?\.jpg)"')
#从源代码中切出图片路径保存到变量imagePaths中
imagePaths=imgRe.findall(content)
4.保存到本地
#定义一个计数器,根据检测到的图片路径记录图片数量
print("共检测到",imagePaths.__len__(),"张图片")
#循环爬取图片
i=0
for imagePath in imagePaths:
i+=1
#爬取的图片加1再加后缀.jsp
urllib.request.urlretrieve(imagePath,f"F:\\image\\{i}.jpg")
#注:引号里面手动输入图片保存到本地的路径,然后加上后缀,最后不要忘了加上一个“\”转义符哦
print(imagePath, "保存成功")
print("图片下载完毕")
这是小编运行成功后的样子:
怎么样,是不是很简单,那么接下来我们看看控(gao)制(pei)版的:
三、Python网络爬虫之控制台版本:
定义函数:
#根据控制台输入的网址获取源代码
def getSourceCode(path):
content=urllib.request.urlopen(path).read()
# 编解码和忽略不可解的非法字符,注:双引号放入的编码格式请按照爬取网页的编码格式来,小生爬取网页的编码是gb2312
return content.decode("gb2312","ignore")
def getImagePath(content):
# 正则表达式(配置匹配的图片路径)
imgRe=re.compile(r'data-original="(.+?\.jpg)"')
# 从源代码中切出图片路径
imagePaths=imgRe.findall(content)
return imagePaths
控制台(小编是从工作区间用PowerShell窗口运行的,大家从控制台运行也是没毛病的)
print("***欢迎使用爬虫爬取网页图片***")
#输入的网址放在getSourceCode方法
path=input("请输入要爬取图片的网址:")
print("正在解析网址......")
#调用函数解析网址
content=getSourceCode(path)
print("解析网址成功......")
#读取图片的路径
imagePaths=getImagePath(content)
#检测输出图片的数量
print("共检测到",imagePaths.__len__(),"张图片")
isSure=input("您确定要获取到这些图片吗?Yes/NO:")
输入网址后如果下载时网络不怎么nice,我们就可以向上面一样加上一句温馨提示,代码运行后入下图:
用户输入选择:
isSure=input("您确定要获取到这些图片吗?Yes/NO:")
if isSure=="Yes":
savePath=input("请输入保存到本地的盘符:")
i=0
for imagePath in imagePaths:
i+=1
urllib.request.urlretrieve(imagePath,f"{savePath}\\{i}.jpg")
print(imagePath,"保存成功")
print("图片下载完毕")
else:
print("欢迎下次使用!")
运营结果如下:
注:输入保存路径时可直接从电脑路径中Copy
怎么样,看完注释详细的测试版之后再看控制台版本是不是更好理解呢,快打开电脑敲起来吧 !
结语:
我的第一篇博客,写得可能不是很好,有不对之处,还请各位提出, 希望以后能更好。