会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132489个问题

老师,你好,我按照代码文档写的代码运行出现以下出错,不知道什么原因,方便解答一下吗

from fake_useragent import UserAgent
import requests
from lxml import etree

# 发送请求
class Downloader():
    def do_download(self,url):
        print(url)
        headers = {'User-Agent' : UserAgent().chrome}
        resp = requests.get(url, headers=headers)
        if resp.status_code == 200:
            resp.encoding = 'utf-8'
            return resp.text

# 数据分析
class Parser():
    def do_parse(self,html):
        e = etree.HTML(html)
        # 写要爬取的内容的提取
        contents = [div.xpath('string(.)').strip() for div in e.xpath('//div[@class="content"]')]
        urls = ['https://www.qiushibaike.com{}'.format(url) for url in e.xpath('//ul[@class="pagination"]/li/a/@href')]
        return contents,urls

# 数据保存
class DataOutPut():
    def do_save(self,datas):
        with open('duanzi2.txt','a',encoding='utf-8') as f:
            for data in datas:
                f.write(data + '\n')

# URL管理器
class URLManager():
    def __init__(self):
        self.new_url = set()
        self.old_url = set()

    # 加入一个url的方法
    def add_new_url(self,url):
        if url is not None and url != '' and url not in self.old_url:
            self.new_url.add(url)
    # 加入多个url
    def add_new_urls(self,urls):
        for url in urls:
            self.add_new_url(url)
    # 获取一个url
    def get_new_url(self):
        url = self.new_url.pop()
        self.old_url.add(url)
        return url
    # 获取还有多少个url要爬取c
    def get_new_url_size(self):
        return len(self.new_url)

    # 获取是否还有url要爬取
    def have_new_url(self):
        return self.get_new_url_size() > 0

# 调度器
class Scheduler:
    def __init__(self):
        self.downloader = Downloader()
        self.parser = Parser()
        self.data_out_put = DataOutPut()
        self.url_manger = URLManager()

    def start(self,url):
        self.url_manger.add_new_urls(url)
        while self.url_manger.have_new_url():
            url = self.url_manger.get_new_url()
            html = self.downloader.do_download(url)
            datas,urls = self.parser.do_parse(html)
            self.data_out_put.do_save(datas)
            self.url_manger.add_new_urls(urls)

# 主函数
if __name__ == '__main__':
    scheduler = Scheduler()
    url = 'https://www.qiushibaike.com/text/'
    scheduler.start(url)

image.png

Python 全系列/第十五阶段:Python 爬虫开发/爬虫反反爬- 22321楼



vue_shop.zip

flask_first06.zip

这个地方又遇到问题了,我使用 apipost 测试软件 登录传值回后端,后端能接收到,从后端返回值 apipost 测试软件能接收的到。

但是,使用vue登录传值回后端,后端能接收到,但返回值却返回不了vue的前端,能帮我看一下问题出在哪了吗。

image.png

看 后端可以正常的接收到数据。


image.png

pipost 测试软件 可以正常接收到返回信息


image.png

image.png

vue 却接收不到返回消息


image.png

image.png

跟老师写的一样的,console.log(res) 就返回这样,空值还各种报错


image.png

image.png

使用国定的console.log("123") 就能有返回值,但还是有报错 


这个地方用了4个晚上时间了,实在是找不出原因了,跪求老师帮助...
源文件在上面,再三恳求老师给看看,我这再搞就搞崩了...

Python 全系列/第十阶段:Flask百战电商后台项目/Flask百战电商后台项目 22323楼
Python 全系列/第一阶段:Python入门/控制语句 22324楼
JAVA 全系列/第十一阶段:分布式RPC调用和分布式文件存储/Zookeeper 22325楼
Python 全系列/第二阶段:Python 深入与提高/文件处理 22326楼
JAVA 全系列/第十一阶段:分布式RPC调用和分布式文件存储/Zookeeper 22328楼

老师,画图软件有以下几个问题不是很明白

  1. 19行的绘制最后的图形id这里是啥意思?

  2. 定义橡皮檫方法的时候x-10,y-10,x+10,y+10是啥意思?

  3. if 判断语句里面的self.x,slef.y不是一个记录上一次画的终点值嘛,为啥加了这一段话就可以在绘画区域里随便画了,我看没加if判断语句之前程序默认在绘画区域里的0,0为起始值,不是很明白这个原理?

  4. 老师顺便帮我看下代码里的注释,看下理解得对嘛?


"""开发画图软件的菜单
"""

from tkinter.filedialog import *
from tkinter.colorchooser import *

#窗口的全局变量
win_width=900
win_height=450

class Application(Frame):

    def __init__(self,master=None,bgcolor='#000000'):
        super().__init__(master)
        self.master=master
        self.bgcolor=bgcolor
        self.x=0  #起始点为0
        self.y=0
        self.lastDraw=0   # 表示最后绘制的图形的id
        self.fgcolor='#ff0000'  #默认是红色
        self.startDrawFlag = False  # 一开始默认是False

        self.pack()

        self.createWidget()

    def createWidget(self):
        #创建绘图区
        self.drawpad=Canvas(root,width=win_width,height=win_height*0.9,bg=self.bgcolor)
        self.drawpad.pack()

        #创建按钮
        btn_start = Button(root, text="开始", name="start")
        btn_start.pack(side="left", padx="10")

        btn_pen = Button(root, text="画笔", name="pen")
        btn_pen.pack(side="left", padx="10")

        btn_rect = Button(root, text="矩形", name="rect")
        btn_rect.pack(side="left", padx="10")

        btn_clear = Button(root, text="清屏", name="clear")
        btn_clear.pack(side="left", padx="10")

        btn_erasor = Button(root, text="橡皮擦", name="erasor")
        btn_erasor.pack(side="left", padx="10")

        btn_line = Button(root, text="直线", name="line")
        btn_line.pack(side="left", padx="10")

        btn_lineArrow = Button(root, text="箭头直线", name="lineArrow")
        btn_lineArrow.pack(side="left", padx="10")

        btn_color = Button(root, text="颜色", name="color")
        btn_color.pack(side="left", padx="10")

        # 事件处理
        btn_pen.bind_class("Button", "<1>", self.eventManager)   #按住鼠标左键拖动
        self.drawpad.bind("<ButtonRelease-1>",self.stopDraw)     #释放鼠标左键处理

        # 增加颜色切换的快捷键
        root.bind("<KeyPress-r>", self.kuaijiejian)
        root.bind("<KeyPress-g>", self.kuaijiejian)
        root.bind("<KeyPress-y>", self.kuaijiejian)



    def eventManager(self,event):
        name = event.widget.winfo_name()
        print(name)

        if name=='line':   #直线
            self.drawpad.bind("<B1-Motion>",self.myline)  #在画图区域按住鼠标左键拖动进行事件处理
        elif name=='lineArrow': #箭头直线
            self.drawpad.bind("<B1-Motion>", self.mylineArrow)
        elif name=='rect':  #定义矩形方法
            self.drawpad.bind("<B1-Motion>", self.myRect)
        elif name=='pen':   #定义画笔方法
            self.drawpad.bind("<B1-Motion>", self.myPen)
        elif name=='erasor':  #定义橡皮檫方法
            self.drawpad.bind("<B1-Motion>", self.myErasor)
        elif name=="clear":  #清屏方法
            self.drawpad.delete("all")
        elif name=="color":  #更换颜色的方法
            c = askcolor(color=self.fgcolor,title="选择画笔颜色")
            #[(255,0,0),"#ff0000"]
            self.fgcolor = c[1]

    def startDraw(self,event):  #重新定义方法名,调用即可
        self.drawpad.delete(self.lastDraw)  # 删除已有的直线,重新调用

        if not self.startDrawFlag:
            self.startDrawFlag = True
            self.x = event.x  # Ture表示不是第一次画,将self.x,self.y设置为上一次画的终点值,记录最后一次终点值的坐标
            self.y = event.y

    def myline(self,event):  #定义直线方法
        self.startDraw(event)

        self.lastDraw=self.drawpad.create_line(self.x,self.y,event.x,event.y,fill=self.fgcolor)  #记录起始坐标与终点坐标事件处理

    def mylineArrow(self,event):  #定义箭头直线方法
        self.drawpad.delete(self.lastDraw)  # 删除已有的直线,重新调用
        if not self.startDrawFlag:
            self.startDrawFlag = True
            self.x = event.x  # Ture表示不是第一次画,将self.x,self.y设置为上一次画的终点值,记录最后一次终点值的坐标
            self.y = event.y
        self.lastDraw = self.drawpad.create_line(self.x, self.y, event.x, event.y,arrow=LAST,fill=self.fgcolor)

    def myRect(self,event):    #定义矩形方法
        self.drawpad.delete(self.lastDraw)  # 删除已有的直线,重新调用
        if not self.startDrawFlag:
            self.startDrawFlag = True
            self.x = event.x
            self.y = event.y
        self.lastDraw = self.drawpad.create_rectangle(self.x, self.y, event.x, event.y,outline=self.fgcolor)

    def myPen(self,event):   #定义画笔方法
        self.startDraw(event)
        self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
        self.x = event.x
        self.y = event.y

    def myErasor(self,event): #定义橡皮檫方法
        self.startDraw(event)
        self.drawpad.create_line(event.x-10, event.y-10, event.x+10, event.y+10, fill=self.bgcolor)
        self.x = event.x
        self.y = event.y

    def kuaijiejian(self,event):  #使用快捷键更换颜色
        if event.char =="r":
            self.fgcolor = "#ff0000" #红色
        elif event.char =="g":
            self.fgcolor = "#00ff00" #绿色
        elif event.char =="y":
            self.fgcolor = "#ffff00" #黄色

    def stopDraw(self,event):  #释放鼠标左键处理
        self.startDrawFlag = False  #释放鼠标左键时回到最初的False,重新调用即可
        self.lastDraw=0 #0为初始化,变量不存在


root=Tk()
root.title('tk')
root.geometry(str(win_width)+'x'+str(win_height)+'+200+300')
app=Application(master=root)
root.mainloop()


Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 22329楼
JAVA 全系列/第十八阶段:亿级高并发电商项目_架构/编码(旧)/电商:基于SpringSecurity实现后台登录功能 22330楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Spring 22331楼
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 22332楼

老师,我的这个代码可以成功插入数据,可是在执行成功前会显示异常是怎么回事?

public class JdbcUtil {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    
    static {
        ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
        driver=bundle.getString("driver");
        url=bundle.getString("url");
        username=bundle.getString("username");
        password=bundle.getString("password");
        
        try {
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
        Connection conn=null;
        try {
            conn= DriverManager.getConnection(url,username,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    private static void closeStatement(Statement state){
        if(state != null){
            try {
                state.close();
            } catch (Exception e) {
// TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static void closeConnection(Connection conn){
        if(conn != null){
            try {
                conn.close();
            } catch (Exception e) {
// TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static void closeResource(Statement state,Connection conn){
        closeStatement(state);
        closeConnection(conn);
    }


}
public class JDBCTest {
    public void insertData(String department_name,int location_id){
        Connection conn=null;
        Statement state=null;
        try {
            conn=JdbcUtil.getConnection();
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/zf?useUnicode=true&characterEncoding=utf8","root","zfroot");
            String sql="insert into department value(default ,'"+department_name+"',"+location_id+")";
            state=conn.createStatement();
            int flag=state.executeUpdate(sql);
            System.out.println(flag);
            } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JdbcUtil.closeResource(state,conn);
        }
    }

    public void updateData(String department_name,int location_id,int department_id){
        Connection conn=null;
        Statement state=null;
        try {
            conn=JdbcUtil.getConnection();
            String sql="update department set department_name='"+department_name+"',location_id="+location_id+" where department_id="+department_id+";";
            state=conn.createStatement();
            int flag=state.executeUpdate(sql);
            System.out.println(flag);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JdbcUtil.closeResource(state,conn);

        }
    }

    public static void main(String[] args) {
        JDBCTest jdbcTest=new JDBCTest();
//        jdbcTest.updateData("策划部",6,3);
        jdbcTest.insertData("经理部",7);
    }
}

image.png

image.png

JAVA 全系列/第三阶段:数据库编程/JDBC技术(旧) 22333楼
Python 全系列/第二阶段:Python 深入与提高/文件处理 22335楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637