【Python】基于Python3的第一个爬虫小程序----轻轻松松爬取网页图片!

最近研究了一下Python爬虫程序,发现挺简单的。果然不去接触的东西,总是最难的,有时间还是要多去研究一下自己喜欢的感兴趣的东西。下面我们来看一下,Python爬虫是怎么实现的。

废话不多说,先来看一下成果图

下面是爬取的网页保存成TXT文件

下面是爬取保存的图片

看完效果是不是有一种跃跃欲试的感觉。下面我们说一下具体的环境和代码。

什么是爬虫

1.网络爬虫:是一种按照一定的规则,自动地抓取网上信息的程序或者脚本。

2.爬虫:为了获取网上大量的我们能看的到或看不到的数据

运行环境

Python版本: Python3.x 
运行平台: Windows 

基本步骤

(1)定位要爬的网页地址

urllib中有 urllib.urlopen(str) 方法用于打开网页并返回一个对象。

page = urlopen(url)

(2)获取网址的html文档

调用这个对象的read()方法后能直接获得网页的源代码,内容与浏览器右键查看源码的内容一样。

htmlcode = page.read()

(3)解析网址的html文档

首先我们要一个正则表达式 (如果不懂可以提前看一下菜鸟入门教程-->Go)。

下面正则表达式(src="(\http\S+?\.jpg)),匹配以src="后接http(保留在匹配字符中)开头,然后接一个或多个任何非空白字符,以.jpg" width结尾的字符串。

这样就能获取到图片链接。

reg = r'src="(\http\S+?\.jpg)'#正则表达式
reg_img = re.compile(reg)#编译一下,运行更快
imglist = reg_img.findall(htmlcode.decode('utf-8'))#进行匹配

(4)搜寻要下载的数据并保存到本地;

urllib库中有一个 urllib.urlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容

urllib.urlretrieve(img, 'tieba.jpg') 

(5)循环上面四步

我们来试用一下在上面代码循环中加上 urllib.urlretrieve(img, 'tieba.jpg') 

for img in imglist:
        urllib.urlretrieve(img, 'tieba.jpg') 

发现只有一个图片文件tieba.jpg,这是因为后面下载的图片也命名为tieba.jpg覆盖了前面现在的图片,修改成 './%s/%s.jpg' %(savepath, x) ,并在其中添加保存路径为当前路径src。

    x=0
    for img in imglist:
        print('img :',img)
        urlretrieve(img, './src/%s.jpg' %x)
        x += 1

添加交互提示

最后我优化了下小程序的交互,封装程序就如下图这样。

报错问题

具体可以查看我的文章:【Python】学习Python爬虫遇到几个小问题!

其他阅读

推荐阅读:

【Python】揭秘知乎最受欢迎的 98 本书!唯有阅读来报之!

python3 爬虫

结束语

是不是很简单,大家也赶紧动手来写一个你爬虫小程序吧。下面是源码,欢迎留言指正不足的地方。

 # -- coding: UTF-8 --
from urllib.request import urlopen
from urllib.request import urlretrieve

#写文件
def write_file(file, filename='test.txt'):
    pageFile = open(filename,'wb')#以写的方式打开pageCode.txt
    pageFile.write(file)#写入
    pageFile.close()#开了记得关

#获取到网页内容
def get_html(url):
    page = urlopen(url)
    htmlcode = page.read()
    return htmlcode

#创建新目录
def mkdir(path):
    # 引入模块
    import os
 
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")
 
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)
 
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path) 
 
        print (' 创建成功',path)
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print (' 目录已存在',path)
        return False

#获取到网页图片并保存到src目录
def get_image(htmlcode, savepath='src1'):
    import re
    reg = r'src="(\http\S+?\.jpg)'#正则表达式
    reg_img = re.compile(reg)#编译一下,运行更快
    imglist = reg_img.findall(htmlcode.decode('utf-8'))#进行匹配
    x=0
    mkdir(savepath)
    #os.makedirs('%s' %savepath)
    for img in imglist:
        print('img :',img)
        urlretrieve(img, './%s/%s.jpg' %(savepath, x))
        x += 1

print ("-------Python网页图片抓取-------")
path = input('请输入 url:')
if path:
    print ("-------输入了网址:%s-------" %path)
    pass
else:
    path='http://tieba.baidu.com/p/6127945649'
    print ("-------使用默认网址:%s-------" %path)

print ("-------开始获取网页-------")
htmlfile = get_html(path)
#write_file(htmlfile)
print ("-------开始下载图片-------")
get_image(htmlfile)
print ("-------下载图片完成-------")
input("按任意键退出")

也欢迎大家关注我们的公众号,每天学一点技术。也欢迎大家踊跃留言跟我交流交流。

å¨è¿éæå¥å¾çæè¿°

- END -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值