[8]个人学习python:爬取豆瓣首页所有图片

本文介绍了使用Python爬取豆瓣首页图片的过程,详细分析了如何通过字符串操作和正则表达式提取图片URL,以及在保存图片前检查目标目录并创建。还讲解了re.compile()、re.findall()函数在匹配URL中的应用,以及urllib库中的urlopen()和urlretrieve()方法用于获取和下载图片。
摘要由CSDN通过智能技术生成

代码如下:

# -*- coding: utf-8 -*
import urllib.request,socket,re,sys,os
savepath=r'C:\\Users\\Administrator\\PycharmProjects\\untitled\\venv1\\image\\'
def saveimage(url):
    if not os.path.isdir(savepath):       
        os.mkdir(savepath)                
    begin=url.rindex('/')                 #获取图片名字的位置的前一位作为索引,最后一个'\'号的位置
    imagepath=os.path.join(savepath,url[begin+1:])   #path[begin+1:]截取图片名字',并加其加入到文件路径
    return imagepath
url='https://www.douban.com/'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
req=urllib.request.Request(url=url,headers=headers)
page=urllib.request.urlopen(req)
html=page.read()
reg=r'(https:[^\s]*?(png|gif|jpg))'
imag=re.compile(reg)                            
imageurls=re.findall(imag,str(html))            
#print (imageurls)          #此处可以发现imageurls是一个包含图片链接和图片格式的列表,所以for要用两个参数
for imageurl,p in imageurls:
    try:
        urllib.request.urlretrieve(imageurl,saveimage(imageurl))
        print(imageurl, '\n下载成功')
    except:
        print (imageurl,'\n下载失败')

结果如下:


分析:

    分析下图片地址https://img1.doubanio.com/dae/niffler/niffler/images/3a845768-5da8-11e8-b5f8-0242ac110008.jpg
    rindex('/')获取图片地址的名字前一位位置作为索引,不要忘了图片地址是字符串!rindex()返回指定tr在字符串中最后出现的位置,如果没有匹配的字符串会报异常。
1、正则表达式:
     '.'匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符;
     '*'匹配前一个字符零次到多次, '+'则是一次或多次,'?'匹配一次或零次,'[^\s]'匹配一个非空字符,'*?'常用搭配,匹配前一个或多个字符(可以重复匹配);
     '\'+'字符'构成转义字符,'\'+'元字符或转义字符'使其无效化,r只是使转义字符失效。
2、在保存到某目录之前,要先检查一下目录是否存在,不存在则建立;
     os.path.isdir()判断某一路径是否为目录;os.mkdir()创建目录。
3、re.compile()函数用于编译正则表达式,生成一个'正则表达式对象';
     re.findall()在字符串中找到‘正则表达式对象’所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
4、urllib.urlopen()方法用于打开一个URL地址,通常还要加read()获取数据;urllib.urlretrieve()将指定的网址文件下载到本地。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值