python3-小爬虫实现爬取网络图片

python3-小爬虫实现

一直很好奇python是如何去爬取网络上的资源,所以就去查了一些资料,写了一个小的爬虫,记录一下。

爬取成果:
本地文件

小爬虫的功能

简单的抓取网页源代码中的图片url,并通过该url下载到指定的文件夹下。

代码编写

获取网页源码

实现该爬虫需要用到最基本的urllib库。

!注意:在python3中,urllib和urllib2进行了合并,现在只有一个urllib模块,urllib和urllib2的中的内容整合进了urllib.request。

# pthon2写法 
# import urllib
from urllib import request

# 打开网页
page = request.urlopen('https://tieba.baidu.com/p/6178178568?red_tag=3569572802')

#读取源码
html_code = page.read()

#打印到控制台
print(html_code)

源码

用正则表达式提取源码图片url

将上面的代码包装一下:

!注意:python3读取源码返回的是二进制字符串,需要进行解码操作【decode(‘utf-8’)】

from urllib import request
import re
# 获取网页源码
def get_html(url):
    page = request.urlopen(url)
    html = page.read()
    return html

#正则表达式
reg = r'src="(http?.*?)"'
# 以src="开头,包含了http字符串,以.任意字符结尾的字符串

#OR
#reg = r'src="(.+?\.jpg)"'

reg_img = re.compile(reg, re.S)
# 数组去重
imglist = list(set(re.findall(reg_img, html_code.decode('utf-8'))))

x = 0
for img in imglist:
    print(img)

url

下载图片保存到指定文件夹,加入交互操作(注入灵魂(☆_☆))

将上面的获取代码封装成函数,实现将下载的图片保存到当前工作路径下指定的文件夹中。并加入了交互的操作。

#coding=utf-8
from urllib import request
import re
import os
import random
import string

#获取网页源码
def get_html(url):
    page = request.urlopen(url)
    html_code = page.read()
    return html_code

#获取图片url,下载图片并保存到指定文件夹。
def get_image(html_code):
    reg = r'src="(http?.*?)"'
    reg_img = re.compile(reg, re.S)
    imglist = list(set(re.findall(reg_img, html_code.decode('utf-8'))))
    x = 0
    #生成一个随机码
    y = ''.join(random.sample(string.ascii_letters + string.digits, 8))
    print(u'****生成文件夹*******')
    # os.getcwd()获取当前工作区路径
    dir = os.getcwd()+'\img'+y
    print(u'****创建文件文件夹*******')
    # 创建该文件夹
    os.mkdir(dir)
    print(dir)
    for img in imglist:
        #将图片下载到创建的随机文件夹下
        request.urlretrieve(img, dir + '\\%s.jpg' % x)
        x += 1

print(u'*******************网页图片抓取***************')
print(u'请输入url:'),
url = input()#获取用户输入

if url:
    pass
else:
    print(u'*****没有地址,使用默认地址*****')
    url = 'http://tieba.baidu.com/p/6180617680'

print(u'*******************正在获取网页***************')
html_code = get_html(url)
print(u'*******************正在下载图片***************')
get_image(html_code)
print(u'*******************下载成功***************')

交互
参考:https://www.cnblogs.com/Axi8/p/5757270.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值