会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132476个问题
JAVA 全系列/第十八阶段:亿级高并发电商项目_架构/编码(旧)/电商:基于SpringSecurity实现后台登录功能 21631楼

老师,我爬取糗事百科前三页的结果是这样的,是什么情况?

!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge">
<meta name="renderer" content="webkit" />
<meta name="applicable-device" content="pc">



<meta name="domain_verify" content="pmrgi33nmfuw4ir2ejyws5ltnbuweyljnnss4y3pnurcyithovuwiir2ejqwmyrtguzdgobsmezdgnbyheywcmzthbrdmmtemu4tamrqg5rtmirmej2gs3lfknqxmzjchiytkmrzgq4demjugaydcnd5">

附上代码:

from urllib.request import urlopen,Request
from urllib.parse import quote
def get_html(url):
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
    }
    response=Request(url,headers=headers)
    info=urlopen(response)
    content=info.read().decode()
    return content
def save_html(content,filename):
    with open('./爬虫结果/'+filename+'.html','w',encoding='utf-8') as f:  #'r'模式用'gbk'编码,'w'模式用'utf-8'编码
        f.write(content)
def main():
    num=3
    url0=url='https://www.qiushibaike.com/8hr/page/{}/'
    for i in range(num):
        url=url0.format(i+1)
        html=get_html(url)
        filename='糗事百科的第{}页内容'.format(i+1)
        save_html(html,filename)
if __name__=='__main__':
    main()


Python 全系列/第十五阶段:Python 爬虫开发/爬虫基础(旧) 21632楼
JAVA 全系列/第五阶段:JavaWeb开发/Ajax技术详解(旧) 21634楼
JAVA 全系列/第九阶段:Spring Boot实战/Spring Boot 21635楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 21637楼

老师,是不是因为没有监听到左键被按下,所以

this.addKeyListener(new KeyMonitor());

这里头的KeyMonitor指向null,它就不停的报空指针异常,当按下左键之后就没有事了

package plane;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/*
 *游戏主窗口
 */
public class MyGameFrame extends Frame {
    Image planeImg = GameUtil.getImage("images/plane.png");
    Image bg = GameUtil.getImage("images/bg.jpg");



    Plane p1 = new Plane(planeImg,100,100,3);

    Boolean left,right,up,down;//飞机的方向控制

    private Image offScreenImage = null;


    @Override
    public void paint(Graphics g) {    //g当作是一支画笔


        g.drawImage(bg,0,0,500,500,null);

        p1.drawMyself(g);

        if (left){
            p1.x -= p1.speed;
        }

    }

    //初始化窗口
    public void launchFrame(){
        this.setTitle("飞机大战-许建辉出品");
        setVisible(true); //设定窗口可见
        setSize(500,500);//设置窗口大小
        setLocation(400,400);//窗口打开的位置

        //匿名内部类,监听窗口
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);//程序正常退出
            }
        });

        new PaintThread().start();//启动重画窗口线程
        this.addKeyListener(new KeyMonitor());
    }

    public static void main(String[] args) {
        MyGameFrame myGameFrame = new MyGameFrame();
        myGameFrame.launchFrame();
    }

    //双缓冲解决屏幕闪烁问题
    public void update(Graphics g){
        if (offScreenImage == null){
            offScreenImage = this.createImage(500,500);
        }

        Graphics gOff = offScreenImage.getGraphics();
        paint(gOff);
        g.drawImage(offScreenImage,0,0,null);
    }

    /*
     *定义一个重画窗口线程的内部类
     *定义成内部类是为了方便使用外部类的相关方法
     */
    class PaintThread extends Thread{
        @Override
        public void run() {
            while(true){
                repaint(); //内部类可以直接使用外部类的成员

                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //内部类,用于监听键盘的操作
    class KeyMonitor extends KeyAdapter{
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println("按下:"+e.getKeyCode());
            if (e.getKeyCode() == KeyEvent.VK_LEFT){
                left = true;
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {
            System.out.println("抬起:"+e.getKeyCode());
            if (e.getKeyCode() == KeyEvent.VK_LEFT){
                left = false;
            }
        }
    }
}


JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 21638楼
大数据全系列/第二十五阶段:Kylin 数据仓库分析引擎(扩展)/Kylin 算法及实战操作 21639楼
Python 全系列/第四阶段:函数式编程和核心特性/生成器和装饰器 21640楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 21644楼
人工智能/第十四阶段:深度学习-目标检测YOLO(V8正在更新中)实战/YOLOv3代码实战 21645楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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