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

2018-05-15  本文已影响22人  b861a75d2a7d

一、需求:根据输入的贴吧地址,分析当前帖子的页数,获取帖子中所有的图片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('')

上一篇下一篇

猜你喜欢

热点阅读