一、需求:根据输入的贴吧地址,分析当前帖子的页数,获取帖子中所有的图片URL,并保存在本地。
二、实例截图:
截图1三、步骤分析。
1.定义获取页面数据的函数。
2.从获取到的页面数据中分析,找出总页数和图片URL。
分析总页数,为后面构建总页数URL做准备3.分析网页结构,找出图片URL
图片1 图片2通过仔细分析观察,我们不难发现,图片的地址开头分为两种形式,分布是:http://imgsrc 和 https://imgsa 。所以在构建正则表达式的时候,我需要注意这点。
4.找出所有的图片地址后,我们就要开始创建文件夹,保存图片了。
5.传入保存了所有图片URL的列表,分析图片数量,并保存到本地。
图片下载函数6.最后就是使用一个main()函数把所有的函数组合起来。
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('')
网友评论