利用爬虫下载批量图片

这是利用python爬取豆瓣Top250电影图片,并下载在本地的一个文件夹中的例子,用了urllib.request.urlretrieve(),直接上代码了,注释说的很清楚哦

import urllib
import urllib.request,urllib.error
import re
from bs4 import BeautifulSoup
import time


def main():
    baseurl="https://movie.douban.com/top250?start="
    datalist = getData(baseurl)
#主函数,用于调用全局的函数和参数

findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)
#用正则表达式来匹配图片的的url

#调用了主网站的url
def getData(baseurl):
    datalist=[]
    #利用for循环来访问所有的url
    for i in range(0,10):
        url = baseurl + str(i*25) #遍历所有页面的url
        html = askURL(url)    #将获取的网页存进变量html中
        soup = BeautifulSoup(html,"html.parser")   #利用靓汤来对获取的页面源码进行获取并存入变量soup中
        for item in soup.find_all('div',class_="item"):    #进行网页源码初等的筛选和解析
            item = str(item)                     # 转化为字符串
            imgSrc = re.findall(findImgSrc, item)[0]         #调用前面的findImgrc找到所有的图片url
            imgSrc_name=imgSrc.split('/')[-1]       #定义图片的名字以便于对文件名的循环,这里是利用url的特点将url进行列表分割,取最后一段,刚好带有.jpg
            print(imgSrc_name)     #这个主要用于浪费电
            urllib.request.urlretrieve(imgSrc, filename=r"C:\Users\86188\Desktop\spider1\%s"%imgSrc_name)
            #这一行是下载和保存,是最核心的一行,imgsrc是下载的地址,filename后是存储路径和文件名,刚好每循环一次下载一个
            time.sleep(2.0)  # 休息两秒,怕被封
    return datalist #这里是返回datalist,不然没法调用

#这是访问所有url的函数
def askURL(url):
    head = {
        "不给你们看"怕id被禁,哈哈
    }
    #头文件
    request = urllib.request.Request(url, headers=head)
    #请求口令
    html = ""
    try:         #捕获异常,如果很自信可以不用
        response = urllib.request.urlopen(request)   #将返回的数据存入response
        html = response.read().decode("utf-8")       #对response进行读取解析为我们能看懂的文字并存入html
        # print(html)
    except urllib.error.URLError as e:       #如果出选报错就会运行这些
        if hasattr(e, "code"):
            print(e.code)           #网页状态码
        if hasattr(e, "reason"):
            print(e.reason)         #报错原因
    return html



if __name__ == "__main__":

    main()
    print('已全部下载完成')
#主函数的调用

实现下载功能,算是在上一个文章递进吧,毕竟机器学习需要学习资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值