欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Python3批量保存贴吧图片-附爬虫程序

程序员文章站 2022-05-27 08:29:26
...

测试运行环境:

  • Windows10、Python3.6、Pycharm IDE 2017.2

程序简介

其实刚学习Python十多天,有着“人生苦短,我用Python”的口号,Python的代码精简,学习易于上手。选用Python版本的时候,相信很多人有过纠结。纠结的同学可以去知乎查看一下众多的想法。而我之前从未接触过Python,因为想用来处理图像,上手OpenMV开发板,所以我选用了Python3。所以选择Python版本需要按照自己的用途来确定,我如果只是想掌握一门新语言,建议还是Python3,Python最新版本为3.6。现在企业工作,多数还是选用的较为成熟的Python2.7,网上例程也多是Python2。我学习Python的主要途径是廖雪峰-Python教程小甲鱼PythonPython3|菜鸟教程等。廖雪峰的教程应该是各大论坛社区首要推荐的吧;小甲鱼的视频讲解很详细,时间充裕可以考虑;菜鸟教程讲解详细,就像详细版的中文文档。
使用Python3批量下载贴吧图片的程序是按照小甲鱼课程中的爬虫程序修改过来的,学了一点GUI界面,然后结合到一起弄成了一个小程序。
首先先放效果图:

使用Python3批量保存贴吧图片-附爬虫程序

这里我们演示就用大热的电影《战狼2》的导演吴京相关的贴吧页面做演示

页面直达

使用Python3批量保存贴吧图片-附爬虫程序

输入需要下载的贴吧网址和保存路径文件夹,如下所示:

使用Python3批量保存贴吧图片-附爬虫程序

点击下载后会在程序所在路径下创建一个 Baidutieba 的文件夹,我们进去可以看到刚才保存的图片

使用Python3批量保存贴吧图片-附爬虫程序


运行代码如下:

from tkinter import *
import urllib.request
import os
import re


# #####下载保存模块######
def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent',
                   'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')
    resp = urllib.request.urlopen(req)
    html = resp.read().decode('utf-8')
    return html


# #####根据得到的html文本查找网页中存在的图片####
def get_imgs(html):
    p = r'<img class="BDE_Image" src="([^"]+\.jpg)"'
    imglist = re.findall(p, html)

    for each in imglist:
        filename = each.split('/')[-1]
        urllib.request.urlretrieve(each, filename, None)


def download():
    url = e1.get()
    folder = e2.get()
    print(url)
    print(folder)
    os.mkdir(folder)  # 创建文件夹
    os.chdir(folder)  # 切换到文件夹目录
    get_imgs(url_open(url))

# #######GUI界面############
root = Tk()
root.title('贴吧图片下载器')
Label(root, text='贴吧链接:').grid(row=0, column=0)
Label(root, text='下载目录:').grid(row=1, column=0)

e1 = Entry(root)
e2 = Entry(root)

e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)

Button(root, text='下载', width=10, command=download) \
    .grid(row=2, column=0, sticky=W, padx=10, pady=5)
Button(root, text='退出', width=10, command=root.quit) \
    .grid(row=2, column=1, sticky=E, padx=10, pady=5)

mainloop()

大家可以测试一下,是否存在一些bug以及改进的地方。
因为没有认真学正则表达式,所以在程序中没有用及。

已知bug:

  • 程序运行时因为使用了TKinter,与编译器会用冲突,所以在运行时会出现未响应的现象。
  • 因为Windows的路径分割是反斜杠,反斜杠在程序中为转义字符,所以在Windows上运行时输入路径时应该双反斜杠。如 C盘根目录为’C:\’,应该写为“C:\\”。

本来是想通过pyinstaller直接将程序打包成一个 .exe可执行文件,但是最高只支持Python3.5版本,在打包Python3.6时会出现“IndexError: tuple index out of range”的错误。之后可行的办法后会对此进行更新。

补充

—>另外第一时间会同步更新到我的WordPress博客平台(点击进入)
—>我的域名也启用:www.faceme.site