2021-08-11

想制作Python爬虫小软件练练手吗?那就进来看看吧!(1)

在这里我把写的小软件代码放在下面,废话不多说,直接上效果图和代码。
这软件的功能主要是根据用户的选择进行一键爬取图片,后面我也会写几篇文章详细的讲解一下我遇到的问题及解决方法。
这是软件的主页面

首先

制作这个小软件,需要用到 Python,Pycharm,PyQt5设计师,像博主用的软件版本是Python 3.9,Pycharm 2021 ,PyQt5 5.15。

1.Pycharm

用Pycharm,创建3个Python包,分别为,main.py,图片爬虫.py,ui_image.py。
在这里插入图片描述

main.py 主函数
import base64
import sys
import threading
from PyQt5.QtGui import QPalette, QPixmap, QBrush
from PyQt5.QtWidgets import QApplication, QMainWindow
import 彼岸图网
from 图片爬虫 import pac


class Le(threading.Thread):  # 多线程,继承Thread
    def run(self):  # 将费时间的程序放在run方法,防止主页面卡顿或无响应
        b = click_txt(txt='4kdongman')
        end = ui.lineEdit_2.text()
        pac(txt=b, end=int(end))
        ui.label_2.setText('爬取成功')


# 要调动的函数
def co():  # 窗口背景图and透明度设置
    # 为窗口增加背景图
    from ui_image_png import img as one  # 引入img变量,赋别名为one
    ...
    tmp = open('one.png', 'wb')  # 创建临时的文件
    tmp.write(base64.b64decode(one))  # 把这个one图片解码出来,写入文件中去。
    tmp.close()
    # 现在就能用了,用完(加载到程序里之后)删了就好

    # xxxxxx     #这里one.png 就已经拿出来了,可以用来。下面就可以对此进行你想要的操作了。
    # do_something_with(one.png)  # 做任何你想做的
    # xxxxxx

    # os.remove('one.png')  # 用完可以删除这个临时图片
    palette = QPalette()
    pix = QPixmap('one.png')  # 图片位置最好放在(main.py)所在的文件夹下
    # 图片自适应窗口大小,将下列代码#去掉
    # pix = pix.scaled(MainWindow.width(), MainWindow.height())
    palette.setBrush(QPalette.Background, QBrush(pix))
    MainWindow.setPalette(palette)
    # 设置窗口透明度
    MainWindow.setWindowOpacity(1)
    # MainWindow.setAttribute(QtCore.Qt.WA_TintedBackground)


def yc():  # 按钮背景色设置,背景透明
    # 按钮的背景色设置代码,后面4位数字,前面3位是背景色rgb代码,后1位是决定按钮透明的数值0-255,数值=0,按钮实现透明
    ui.pushButton.setStyleSheet('QPushButton{background-color:rgb(255,255,255,0)}')
    ui.pushButton_2.setStyleSheet('QPushButton{background-color:rgb(255,255,255,0)}')
    ui.pushButton_3.setStyleSheet('QPushButton{background-color:rgb(255,255,255,0)}')
    ui.pushButton_4.setStyleSheet('QPushButton{background-color:rgb(255,255,255,0)}')
    ui.pushButton_5.setStyleSheet('QPushButton{background-color:rgb(255,255,255,0)}')
    ui.pushButton_6.setStyleSheet('QPushButton{background-color:rgb(255,255,255,0)}')
    ui.lineEdit_2.setStyleSheet('QPushButton{background-color:rgb(255,255,255,0)}')
    # ui.lineEdit_2.setStyleSheet("background:transparent;border-width:0;border-style:outset")
    # 下列代码可以将控件的背景色设置位透明,边框去除(border-width:0;border-style:outset),控件透明(background:transparent;)
    ui.lineEdit_2.setStyleSheet("background:transparent")

    # 按钮的backround(背景色)为黑色,当鼠标落在按钮上显示yelllow(黄色)
    # ui.pushButton.setStyleSheet(
    #    '''QPushButton{background:#000000;border-radius:5px;}QPushButton:hover{background:yellow;}''')


def key():  # 解锁函数
    ui.pushButton.setEnabled(True)
    ui.pushButton_2.setEnabled(True)
    ui.pushButton_3.setEnabled(True)
    ui.pushButton_4.setEnabled(True)
    ui.pushButton_5.setEnabled(True)


def button():  # 锁住专区函数
    ui.pushButton.clicked.connect(click_dm)
    ui.pushButton.setEnabled(False)
    ui.pushButton_2.clicked.connect(click_mn)
    ui.pushButton_2.setEnabled(False)
    ui.pushButton_3.clicked.connect(click_fj)
    ui.pushButton_3.setEnabled(False)
    ui.pushButton_4.clicked.connect(click_yx)
    ui.pushButton_4.setEnabled(False)
    ui.pushButton_5.clicked.connect(click_ys)
    ui.pushButton_5.setEnabled(False)


def click_txt(txt):  # 专区判断函数
    if txt == '4kdongman':
        a1 = '4kdongman'
        return a1
    elif txt == '4kmeinv':
        a2 = '4kmeinv'
        return a2
    elif txt == '4kfengjing':
        a3 = '4kfengjing'
        return a3
    elif txt == '4kyouxi':
        a4 = '4kyouxi'
        return a4
    elif txt == '4kyingshi':
        a5 = '4kyingshi'
        return a5


def click_dm():  # 按钮点击函数
    ui.label_2.setText("已选择4k动漫专区")
    ui.label_2.setText("正在爬取.....")
    button()
    t1.start()


def click_mn():  # 按钮点击函数
    ui.label_2.setText("已选择4k美女专区")
    ui.label_2.setText("正在爬取.....")
    button()
    t1.start()


def click_fj():  # 按钮点击函数
    ui.label_2.setText("已选择4k风景专区")
    ui.label_2.setText("正在爬取.....")
    button()
    t1.start()


def click_yx():  # 按钮点击函数
    ui.label_2.setText("已选择4k游戏专区")
    ui.label_2.setText("正在爬取.....")
    button()
    t1.start()


def click_ys():  # 按钮点击函数
    ui.label_2.setText("已选择4k影视专区")
    ui.label_2.setText("正在爬取.....")
    button()
    t1.start()


if __name__ == '__main__':
    # 创建QApplication的实例
    app = QApplication(sys.argv)

    MainWindow = QMainWindow()
    # 赋值,方便操作
    ui = 彼岸图网.Ui_MainWindow()
    # 启动setup
    ui.setupUi(MainWindow)
    # 窗口背景图and透明度
    co()
    # 背景色
    yc()
    # 显示窗口
    MainWindow.show()
    # 锁住专区按钮
    button()
    t1 = Le()
    # 点击按钮6,解锁专区按钮
    ui.pushButton_6.clicked.connect(key)
    # 进入程序的主循环、并通过exit函数确保主循环安全结束
    sys.exit(app.exec_())

图片爬虫.py
import os
import re
import requests


def pac(txt, end):
    if not os.path.exists('D:/彼岸图网'):
        os.makedirs('D:/彼岸图网')

    for i in range(2, end):
        url = 'https://pic.netbian.com/' + txt + '/index_' + str(i) + '.html'
        headers = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' \
                  'Chrome/92.0.4515.107 ' \
                  'Safari/537.36 '
        res = requests.get(url, headers)
        res.encoding = 'gbk'
        html = res.text
        contents = re.findall(r'<a href="(.*?)" target="_blank"><img src=(.*?) alt=(.*?)><b>(.*?)</b></a>', html)
        # print(contents)
        for content in contents:
            img = content[0]
            img_urls = 'https://pic.netbian.com' + img
            res1 = requests.get(img_urls)
            res1.encoding = 'gbk'
            html1 = res1.text
            contents1 = re.findall(
                r'<a href="" id="img"><img src="(.*?)" data-pic="(.*?)" alt="(.*?)" title="(.*?)"></a>',
                html1)
            for content1 in contents1:
                img1 = content1[0]
                img_urls1 = 'https://pic.netbian.com' + img1
                title = content1[2]
                print(title)
                print(img_urls1)
                res2 = requests.get(img_urls1)
                with open('D:/彼岸图网/' + title + '.jpg', 'wb')as fp:
                    fp.write(res2.content)
                    fp.close()

最后

由于第三包的代码量太大(背景图转.py文件),导致所以代码不能放在一个博客里,请感兴趣同学可以在我第二个博客获取剩余代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值