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

from fake_useragent import UserAgent
import re
import requests
from bs4 import BeautifulSoup
from time import sleep

def get_html(url):
    '''
    :param url: 要爬取的地址
    :return: 返回html
    '''
    headers = {"User_Agent": UserAgent().random}
    resp = requests.get(url,headers=headers)

    #status_code   返回状态码
    if resp.status_code == 200:
        resp.encoding='utf-8'
        return resp.text
    else:
        return None

def parse_list(html):
    '''
    :param html: 传递进来有一个电影列表的的html
    :return: 返回一个电影的url
    '''

    soup = BeautifulSoup(html,'lxml')
    a_list = soup.select(".book-img-box > a")
    list_url = []
    for a in a_list:
        list_url.append(a.get('href'))
    # 解决验证CA
    # ssl._create_default_https_context = ssl._create_unverified_context
    list_url = ['https:{}'.format(url)for url in list_url]
    return list_url

def parse_index(html):
    '''
    :param html: 传递一个有电影信息的html
    :return: 已经提取好的电影信息
    '''
    soup = BeautifulSoup(html,'lxml')
    name = soup.find('h1','em')
    book = soup.find_all("a", class_="writer")[0].text
    return {'作者':name,'书名':book}

def main():
    num = int(input("请输入要获取多少页:"))
    for page in range(num):
        url = 'https://www.qidian.com/all?&page={}'.format(page+1)
        list_html = get_html(url)
        list_url = parse_list(list_html)
        for url in list_url:
            info_html = get_html(url)
            move = parse_index(info_html)
            print(move)

if __name__ == '__main__':
    main()


老师,我这个匹配到h1下面的em标签啊,我网上也查了,也用calss匹配过。最后返回要么空,要么是错误的。

image.png


image.png

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

问题:

下载APP部分:为什么在download-list的父元素download(内容为下载APP的li标签)上设置overflow:hidden;将子元素download-list

    (当做download的溢出部分)隐藏后,鼠标悬停在download上,运用display:block; 子元素download-list不显示出来? 

html,body,div,h1,h2,h3,h4,h5,h6,dd,dt,dl,form,label,table,caption,tbody,tfoot,thead,tr,td,th,ul,ol,li,pre
,fieldset,legend,input,textarea,button,blockquote,p{margin:0 ;padding;0;}
ul,ol,li{list-style:none;}
body{text-align: center;}
img,input{vertical-align:middle;}
img{border:none};
a{text-decoration:none;}
/* 黑色导航部分 */
a{
    text-decoration:none;
}
.black-nav{
    width:100%;
    height:40px;
    line-height: 40px;
    background-color:#333;
    color:#b0b0b0;
    font-size:12px;
}
.black-nav>div{
    width:1226px;
    margin:0 auto;
}
/* 导航条左侧无序列表往左浮动,使之位于左边,和右侧的无序列表同设置并行排列*/
.black-nav-left{
    float:left;
}
/* 导航条右侧无序列表往右浮动,无使之位于右边 */
.black-nav-right{
    float:right;
}
/* 左侧无序列表项目往左浮动,使之从左往右水平排列 */
.black-nav-left li{
    float:left;
}
/* 右侧无序列表项目往左浮动,使之从左往右水平排列 */
.black-nav-right li{
    float:left;
}
/* 给无序列表内容|设置样式 */
.black-nav span{
    color:#424242;
    margin:0 .3em;
}
.black-nav a{
    color:#b0b0b0;
}
/* 鼠标悬停在超链接上字体颜色改变 */
.black-nav a:hover{
    color:#fff;
}

/* 购物车部分 */

/* 给内容为购物车的li标签设置样式,相对定位,过渡特性 */
.cart{
    width:120px;
    height:40px;
    line-height:40px;
    text-align:center;
    background-color:#424242;
    margin-left:25px;
    position:relative;
    transition:all 0.3s;
}
/* 鼠标悬停在cart(内容为购物车的li标签)超链接字体颜色变为红色 */
.black-nav-right .cart:hover>a{
    color:red;
}
/* 鼠标悬停在cart上背景颜色变为白色 */
.cart:hover{
    background-color:#fff;
}
/* 给内容为购物车的li标签嵌套一个名为cart-list的div,给其设置样式,绝对定位并隐藏 */
.cart-list{
    width:316px;
    height:78px;
    line-height:78px;
    background-color:#fff;
    color:#424242;
    box-shadow:0 2px 10px rgba(0,0,0,.15);
    position:absolute;
    top:40px;
    right:0;
    display:none;
}
/* 鼠标悬停在内容为购物车的li标签上,嵌套的div(car-list)显示 */
.cart:hover>.cart-list{
    display:block;
}

/* 下载APP处的二维码部分 */

/* 给内容为下载APP的li标签设置相对定位 */
.download{
    position:relative;
    /* 为什么在download-list的父元素download上设置overflow:hidden;将子元素download-list
    (当做download的溢出部分)隐藏后,鼠标悬停在download上,运用display:block; 子元素download-list不显示出来? */
    /* overflow:hidden; */
    /* transition:all 0.2s; */

}
/* 内容为下载APP的li标签嵌套一个名为download-list的div,并对其设置样式,绝对定位 */
.download-list{
    width:124px;
    height:0px;
    background-color:#fff;
    color:#333;
    font-size:14px;
    line-height:14px;
    text-align:center;
    box-shadow:0 1px 5px #aaa;
    position:absolute;
    top:40px;
    left:50%;
    margin-left:-62px;
    /* 将其高度设为0,里面的文字即为溢出部分,将其隐藏 */
    overflow:hidden;
    /* 给高度设置0.3s的过渡 */
    transition:all .3s;
    /* display:none;和下文鼠标悬停在download上使其显示的display:block是本代码中另一种将元素隐藏再显示的方法 */
}
/* 给download-list里的图片设置样式 */
img{
    width:90px;
    height:90px;
    margin:18px auto 12px;
}
/* 鼠标悬停在内容为下载APP的li标签上,其嵌套的download-list高度由0变为148px */
.download:hover>.download-list{
    /* display:block; */
    height:148px;
}
/* 给内容为下载APP的li标签再嵌套一个向上的三角形并设置样式,再隐藏 */
.stri{
    width:0;
    right:0;
    border-bottom:10px solid white;
    border-left:10px solid transparent;
    border-right:10px solid transparent;
    position:absolute;
    bottom:0;
    left:50%;
    transform:translate(-10px,0);
    display:none;
    transition:all 0.3s;
}
/* 鼠标悬停在内容为下载APP的Li标签上,向上的三角形显示,并且有持续时间的过渡 */
.download:hover>.stri{
    display:block;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小米黑色导航部分</title>
    <link rel="icon" href="../images/favicon.ico">
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/小米黑色导航部分.css">
</head>
<body>
    <div class="black-nav">
        <div>
            <div class="black-nav-left">
                <ul>
                    <li><a href="#">小米商城</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">MIUI</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">loT</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">云服务</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">天星数科</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">有品</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">小爱开放平台</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">企业团购</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">资质证照</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">协议规则</a>
                        <span>|</span>
                    </li>
                    <li class="download"><a href="#">下载APP</a>
                        <!-- 为什么download下嵌套的两个div和span标签的前后顺序不一样解析结果也不一样 -->
                        <div class="download-list">
                            <img src="../images/download.png" alt="">
                            <p>小米商城APP </p>
                        </div>
                        <span>|</span>
                        <div class="stri"></div>
                    </li>
                     <li><a href="#">智能生活</a>
                        <span>|</span>
                    </li>
                    <li><a href="#">SelectLocation</a>
                 
                    </li>
                </ul>
            </div>
            <div class="black-nav-right">
                <ul>
                    <li><a href="">登录</a>
                        <span>|</span>
                    </li>
                    <li><a href="">注册</a>
                        <span>|</span>
                    </li>
                    <li><a href="">消息通知</a>
            
                    </li>
                    <li class="cart"><a href="">购物车(0)</a>
                        <div class="cart-list">购物车中还没有商品,赶紧选购吧!</div>
            
                    </li>
                </ul>
            </div>
        </div>
    </div>   
</body>
</html>



WEB前端全系列/第一阶段:HTML5+CSS3模块/CSS3新特性 23044楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图高级 23045楼

老师,这个redisTempalte和cachemanager的 value的格式化序列器都是设置的 

GenericJackson2JsonRedisSerializer

但是不知道为什么会出现

image.png

import org.springframework.cache.CacheManager;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;
/**
 * 定义一个父类型
 */

public class RedisCacheConfigurationx {

    protected RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String, Object> stringObjectRedisTemplate = new RedisTemplate<>();
        stringObjectRedisTemplate.setConnectionFactory(redisConnectionFactory);
        stringObjectRedisTemplate.setKeySerializer(new StringRedisSerializer());
        stringObjectRedisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return stringObjectRedisTemplate;
    }



    protected CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory){

        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
        redisCacheConfiguration.entryTtl(Duration.ofMillis(30L))
                .disableCachingNullValues()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));

        return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
                .cacheDefaults(redisCacheConfiguration).build();

    }
    
}


JAVA 全系列/第二十阶段:租房网(Spring Cloud最新架构)/Livegoods第五天 23046楼

class Node():
    def __init__(self, value=None, next=None):
        self.value = value
        self.next = next

class LinkList():
    def __init__(self):
        self.root = Node()  # 代表头
        self.size = 0  # 代表有几个数据
        self.next = None  # 通过设置next的值为0,来记录最后一个节点是谁,方便新加数据时,安排在那个元素后面
    
    def append(self, value):
        node = Node(value)  # 实例化
        # 判断是否已经有数据
        if not self.next: # 如果没有节点时
            self.root.next = node  # 将新节点挂到root后面
            self.next = node  # 因为self.next的值是None、node的next值是None,所以相当于node代替了self.next
        else:
            self.next.next = node  # 在最后一个节点的next指向node
            self.next = node  # 因为self.next的值是None、node的next值是None,所以相当于node代替了self.next
        self.size += 1
    def append_first(self,value):
        node = Node(value)  # 实例化
        if not self.next:  # 如果没有节点时
            self.root.next = node  # 直接在root后面加节点,相当于在头部加数据
            self.next = node  # 仅有node这一个数据,所以node也是最后一个节点
        else:
            temp = self.root.next  # 获取原来root后面的那个节点
            self.root.next = node  # 将新的节点挂到root上
            node.next = temp  # 新的节点的下一个节点是原来root后面的节点
        self.size += 1
    def __iter__(self):
        """遍历 """
        current = self.root.next
        while current is not self.next:
            yield current.value
            current = current.next
        yield current.value
if __name__ == '__main__':
    link = LinkList()
    link.append('孙悟空')
    link.append('猪八戒')
    link.append_first('唐僧')

    for i in link:
        print(i)

image.png

老师,请问红线处标注的理解是否正确?尤其是红色箭头处

Python 全系列/第十六阶段:数据结构与算法/算法与数据结构(旧) 23049楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Spring 23050楼

老师我在Piane类里面加了几个if语句,想要飞机在边缘的时候停下来,但是每次停下来的位置都不一样,该怎么调整呢?

image.png

package com.bjsxt.plane;

import java.awt.*;
import java.awt.event.KeyEvent;

public class Plane extends GameObject{

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


    @Override
    public void drawMyself(Graphics g) {
        super.drawMyself(g);

        //飞机飞行的算法,可以自行设定
//        x += speed;

        if(left) {
            x -= speed;
        }
        if(right) {
            x += speed;
        }
        if(up) {
            y -= speed;
        }
        if(down) {
            y += speed;
        }
    }

    public void addDirection(KeyEvent e){

        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            left = true;
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            right = true;
        }
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            up = true;
        }
        if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            down = true;
        }

        if (x < 100){
            left = false;
        }
        if (x > 400){
            right = false;
        }
        if (y < 100){
            up = false;
        }
        if (y > 400){
            down = false;
        }
/*        switch (e.getKeyCode()){
            case KeyEvent.VK_LEFT:
                left = true;
                break;
            case KeyEvent.VK_RIGHT:
                right = true;
                break;
            case KeyEvent.VK_UP:
                up = true;
                break;
            case KeyEvent.VK_DOWN:
                down = true;
                break;
        }*/
    }

    public void minusDirection(KeyEvent e){

        if (e.getKeyCode()==KeyEvent.VK_LEFT){
            left = false;
        }
        if (e.getKeyCode()==KeyEvent.VK_RIGHT){
            right = false;
        }
        if (e.getKeyCode()==KeyEvent.VK_UP){
            up = false;
        }
        if (e.getKeyCode()==KeyEvent.VK_DOWN){
            down = false;
        }

/*        switch (e.getKeyCode()){
            case KeyEvent.VK_LEFT:
                left = false;
                break;
            case KeyEvent.VK_RIGHT:
                right = false;
                break;
            case KeyEvent.VK_UP:
                up = false;
                break;
            case KeyEvent.VK_DOWN:
                down = false;
                break;
        }*/
    }

    public Plane(Image img, double x, double y, int speed) {
        super(img, x, y, speed);
    }
}

GIF.gif

JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 23052楼
JAVA 全系列/第十一阶段:分布式RPC调用和分布式文件存储/Zookeeper 23055楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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