会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133674个问题
Python 全系列/第二阶段:Python 深入与提高/文件处理 23117楼
JAVA 全系列/第一阶段:AI驱动的JAVA编程/IDEA的使用和第一个java项目 23118楼
WEB前端全系列/第二阶段:JavaScript编程模块/DOM模型 23122楼

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 爬虫开发/爬虫反反爬- 23123楼

问题:

下载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新特性 23126楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图高级 23127楼

老师,这个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第五天 23128楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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