先放上程序的代码
import urllib.request
import os
import easygui as g
import re
def url_open(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read()
return html
def find_imgspath(url):
html = url_open(url).decode('utf-8')
img_addrs = re.findall(r'http://imgsrc.baidu.com/forum/w%3D580/sign=.+?.jpg', html)
img_addrs2 = re.findall(r'https://imgsa.baidu.com/forum/w%3D580/sign=.+?.jpg', html)
img_addrs.extend(img_addrs2)
#print(img_addrs)
return (img_addrs)
def save_imgs(folder, img_addrs):
for each in img_addrs:
filename = each.split('/')[-1]
with open(filename, 'wb') as f:
img = url_open(each)
f.write(img)
def download(url, folder, pages):
os.chdir(folder)
url = url + "?pn="
for i in range(int(pages[0]), int(pages[1])+1):
page_url = url + str(i)
#print(page_url)
img_addrs = find_imgspath(page_url)
save_imgs(folder, img_addrs)
if __name__ == '__main__':
url = g.enterbox(msg=' 请输入要下载的帖子的地址如: \n https://tieba.baidu.com/p/4693512264', title='贴吧帖子图片下载工具')
page_num = g.multenterbox(msg='输入要下载的页数区间', title='', fields=['起始页', '终止页'])
upath = g.diropenbox('请选择需要保存的文件夹')
download(url, upath, page_num)
程序用easygui编写了简单的图形界面
在界面输入相关信息后,数据传入download函数进行处理,download将传过来的贴吧链接进行加工变成新的链接传入find_imgspath函数,在此函数中,会对源代码中的图片地址进行筛选。
img_addrs = re.findall(r'http://imgsrc.baidu.com/forum/w%3D580/sign=.+?.jpg', html)
img_addrs2 = re.findall(r'https://imgsa.baidu.com/forum/w%3D580/sign=.+?.jpg', html)
根据分析链接中图片地址为以上两种(仅找到两种),此处应用了正则表达式来进行地址查找,将查找后的地址已数组的形式传递给save_imgs进行下载。
url_open 为打开链接的函数,使用req.add_header,将User-Agent修改成浏览器的样子。
就是这样,程序非常简单,但是对于我这段时间学习python来说,自己很有成就感,程序也有很多没考虑到的地方,以后继续学习,努力改善吧。
发个牢骚,记录一下生活
哎,最近开始毕业找工作,好难?
上一次写类似的东西应该是在七八年前的QQ空间吧,纪念一下。