会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133539个问题
WEB前端全系列/第十二阶段:前端工程化(旧)/Less 15286楼
JAVA 全系列/(隐藏)第三十阶段:设计模式/框架源码分析(拓展)/GOF23 设计模式 15287楼

from fake_useragent import UserAgent
import requests
from pyquery import PyQuery
from time import sleep

def get_html(url):
    headers = {'User-Agent': UserAgent().chrome}
    resp = requests.get(url, headers=headers)
    sleep(3)
    if resp.status_code == 200:
        resp.encoding = 'utf-8'
        return resp.text
    else:
        return None

def get_list(html):
    pq = PyQuery(html)
    all_a = pq('div>a[data-act="movies-click"]')
    return [a.get("href") for a in all_a]

def get_index(html):
    pq = PyQuery(html)
    # 电影标题
    name = pq('h1.name').eq(0).text()
    # 电影类型
    types = pq('a.text-link').eq(0).text()
    # 参演人员
    actors_m = pq('li.celebrity.actor>div>.name')
    actor = format_actors(actors_m)
    return f"电影名:{name} \n 类型:{types} \n 演员:{actor} \n"

def format_actors(a_list):
    actors_set = set()
    for a in a_list:
        actors_set.add(a.text.strip())
    return actors_set

def start():
    num = int(input("输入获取多少页数据:"))
    for i in range(num):
        url = f'https://www.maoyan.com/films?offset={i * 30}'
        html = get_html(url)     # 请求内容
        all_href = get_list(html)     # 使用PuQuery解析
        for a in all_href:
            url_ = f'https://maoyan.com{a}'
            index_html = get_html(url_)
            info = get_index(index_html)
            print(info)

if __name__ == '__main__':
    start()

老师,每次爬取到第八个的时候总是出错,index超范围,或者这样屏幕截图 2021-11-07 221603.png

Python 全系列/第十六阶段:Python 爬虫开发/爬虫基础(旧) 15288楼

from fake_useragent import UserAgent
import requests
from pyquery import PyQuery
from time import sleep

def get_html(url):
    headers = {'User-Agent': UserAgent().chrome}
    resp = requests.get(url, headers=headers)
    sleep(3)
    if resp.status_code == 200:
        resp.encoding = 'utf-8'
        return resp.text
    else:
        return None

def get_list(html):
    pq = PyQuery(html)
    all_a = pq('div>a[data-act="movies-click"]')
    return [a.get("href") for a in all_a]

def get_index(html):
    pq = PyQuery(html)
    # 电影标题
    name = pq('h1.name').eq(0).text()
    # 电影类型
    types = pq('a.text-link').eq(0).text()
    # 参演人员
    actors_m = pq('li.celebrity.actor>div>.name')
    actor = format_actors(actors_m)
    return f"电影名:{name} \n 类型:{types} \n 演员:{actor} \n"

def format_actors(a_list):
    actors_set = set()
    for a in a_list:
        actors_set.add(a.text.strip())
    return actors_set

def start():
    num = int(input("输入获取多少页数据:"))
    for i in range(num):
        url = f'https://www.maoyan.com/films?offset={i * 30}'
        html = get_html(url)     # 请求内容
        all_href = get_list(html)     # 使用PuQuery解析
        for a in all_href:
            url_ = f'https://maoyan.com{a}'
            index_html = get_html(url_)
            info = get_index(index_html)
            print(info)

if __name__ == '__main__':
    start()

老师,每次获取到第八个,都会出错,index超范围之内的屏幕截图 2021-11-07 221603.png

Python 全系列/第十六阶段:Python 爬虫开发/爬虫基础(旧) 15289楼
Python 全系列/第二十阶段:数据分析-数据管理/numpy 15290楼
JAVA 全系列/第八阶段:Linux入门到实战/Maven 15291楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 15292楼
JAVA 全系列/第六阶段:项目管理与SSM框架/SpringMVC 15293楼

package test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

public class Shiro_MD5Test {
    public static void main(String[] args) {
        IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro_Md5.ini");
        SecurityManager securityManager = factory.getInstance();
        SecurityUtils.setSecurityManager(securityManager);
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken("nd", "123456");
        try {
            subject.login(token);
            if (subject.isAuthenticated()){
                System.out.println("登陆成功");
            }
        }catch (Exception e){
            System.out.println("登录失败");
        }
    }
}
package realm;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserRealm extends AuthorizingRealm {
    //授权方法
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    //认证方法
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf8&useSSL=false","root","123456");
            PreparedStatement preparedStatement = connection.prepareStatement("select userpassword from user where username = ?");
            //获取用户输入的用户名,插入到语句中
            preparedStatement.setString(1, (String) authenticationToken.getPrincipal());
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                //根据用户输入的用户名去比较密码是否一致
                SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(authenticationToken.getPrincipal(), resultSet.getString("userpassword"), ByteSource.Util.bytes("lf"), "userRealm");
                //如果有值则返回
                return info;
            }
        }catch (Exception e){
            System.out.println("认证方法异常");
        }
        return null;
    }
}
[main]
credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
#设置加密的类型
credentialsMatcher.hashAlgorithmName=md5
#设置迭代的次数
credentialsMatcher.hashIterations=2

#配置realm
userRealm=realm.UserRealm
userRealm.credentialsMatcher=$credentialsMatcher
securityManager.realms=$userRealm

这个加密是怎么执行的,他们各个语句之间执行顺序是什么,越学越蒙了,麻烦详细说一下

JAVA 全系列/第十阶段:权限控制与安全认证/Shiro(旧) 15294楼
JAVA 全系列/第十阶段:权限控制与安全认证/Shiro(旧) 15297楼
JAVA 全系列/第一阶段:AI驱动的JAVA编程/飞机大战小项目训练 15299楼
人工智能/第九阶段:机器学习-概率图模型(旧)/贝叶斯分类 15300楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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