美文网首页
【Python】02-下载百度贴吧图片,并打包成exe文件

【Python】02-下载百度贴吧图片,并打包成exe文件

作者: b861a75d2a7d | 来源:发表于2018-05-15 23:44 被阅读22次

    一、需求:根据输入的贴吧地址,分析当前帖子的页数,获取帖子中所有的图片URL,并保存在本地。



    二、实例截图:

    截图1

    三、步骤分析。

        1.定义获取页面数据的函数。


    获取页面数据

    2.从获取到的页面数据中分析,找出总页数和图片URL。

    分析总页数,为后面构建总页数URL做准备

    3.分析网页结构,找出图片URL

    图片1 图片2

    通过仔细分析观察,我们不难发现,图片的地址开头分为两种形式,分布是:http://imgsrc 和 https://imgsa 。所以在构建正则表达式的时候,我需要注意这点。


    所以我们的函数是这样的

    4.找出所有的图片地址后,我们就要开始创建文件夹,保存图片了。


    创建一个文件夹用来保存图片

    5.传入保存了所有图片URL的列表,分析图片数量,并保存到本地。

    图片下载函数

    6.最后就是使用一个main()函数把所有的函数组合起来。


    main()-1 main()-2

    7.为了让软件使用更加方便,我们可以用pyinstaller这个库把它打包成exe文件。

        7.1安装pyinstaller库:pip install pyinstaller

        7.2打开外面存放py文件的地方。

    一个打开cmd的小窍门 在命令行中输入方法后,按回车键自动开始执行

    完整代码:import requests

    import re

    import time

    import os

    import urllib.request

    def get_page_data(url):

    '''获取页面数据'''

        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}

    page = requests.get(url,headers = headers)

    if page.status_code ==200:

    return page.text

    else:

    print('错误状态码:' +str(page.status_code))

    def get_page_count(html):

    '''确定当前帖子的总页数,方便后面生成所有页面的网址做准备'''

    #1 分析页面,构建正则表达式

        page_re =r'(\d)'

        #2 找出总页数

        page_count = re.search(page_re,html).group(1)

    return page_count

    def get_img_url(html):

    '''获取页面中存在图片的URL'''

    # 1.构建图片正则表达式

        res =r'src="(https*://img.*?.jpg)"'

        img_re = re.compile(res,re.S)

    # 2.找出所有的图片url

        img_url = re.findall(img_re,html)

    return img_url

    def make_dir():

    '''根据当前时间,创建一个文件夹,保存下载下来的图片'''

    # 1 获取当前时间

        now_time = time.strftime("%Y-%m-%d-%H%M%S", time.localtime())

    # 2 转换成字符串形式,创建文件夹

        dir_name =str(now_time)

    os.mkdir(dir_name)

    # 3 进入创建的文件夹

        os.chdir(os.path.join(os.getcwd(),dir_name))

    print('保存文件夹:' + dir_name)

    def save_img(img_url):

    '''传入图片URL的列表后,分析保存图片'''

    # 1 分析图片数量

        for iin range(len(img_url)):

    # 2 生成图片的保存名称

            img_name=str(i) +".jpg"

            try:

    # 3 使用urllib.request.urlretrieve()方法保存图片

                urllib.request.urlretrieve(img_url[i],img_name)

    print('一共%d张,第%d张下载成功:'%(len(img_url),i+1),img_url[i] )

    except:

    print('下载失败:',img_url[i])

    def main():

    all_page_url = []

    all_img_url = []

    url =input("输入百度贴吧帖子URL:")

    # 0 .创建一个文件夹备用

        make_dir()

    # 1.获取页面数据

        html = get_page_data(url)

    # 2.分析总页数

        page_count = get_page_count(html)

    # 3.生成所有页面的url

        for iin range(1,int(page_count)+1):

    page_url = url +'?pn=' +str(i)

    print('第%d页:'%i + page_url)

    all_page_url.append(page_url)

    print('==========所有页面地址生成完成==========')

    # 4 .遍历获取所有页面的图片URL

        for uin all_page_url:

    one_page = get_page_data(u)

    img_url = get_img_url(one_page)

    #因为每个页面返回的img_url是一个列表,所有需要遍历添加到all_img_url

            for u_2in img_url:

    all_img_url.append(u_2)

    print('==========图片开始保存==========')

    save_img(all_img_url)

    print('====================END====================')

    print('图片保存位置:' + os.getcwd())

    # 因为打包成exe文件后,要让cmd命令行不自动关闭,所以我们需要加上一个input方法。

        wait =input('')

    相关文章

      网友评论

          本文标题:【Python】02-下载百度贴吧图片,并打包成exe文件

          本文链接:https://www.haomeiwen.com/subject/avtudftx.html