精华内容
下载资源
问答
  • 返回结果的HTTP状态分别代表什么意思? 本篇博客总结自《图解HTTP》,内容没有复制粘贴,纯手打(也为了自己记的更牢)???? 文章目录返回结果的HTTP状态分别代表什么意思?状态类别2xx成功200 OK204 No ...

    返回结果的HTTP状态码分别代表什么意思?

    本篇博客总结自《图解HTTP》,内容没有复制粘贴,纯手打(也为了自己记的更牢)😂


    HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常,通知出现的错误等工作。

    状态码类别

    类别原因短语
    1xxInformational(信息性状态码)接收的请求正在处理
    2xxSuccess(成功状态码)接收请求正常处理完毕
    3xxRadirection(重定向状态码)需要进行附加操作以完成请求
    4xxClient Error(客户端错误状态码)服务器无法处理请求
    5xxServer Error(服务器错误状态码)服务器处理请求出错

    只要遵守状态码类别的定义,几十改变RFC2616种定义的状态码,或服务器自行创建状态码都没问题。

    状态码的种类多达60多种
    其中包括:

    • RFC2616
    • RFC4918,5842和附加HTTP状态码(RFC6585)

    RFC是一系列以编号排定的文件。文件收集了有关互联网相关信息,
    接下来我介绍一下常用的也最具有代表性的14种状态码


    2xx成功

    200 OK

    表示从客户端发来的请求再服务端被正常处理了

    204 No Content

    该状态码代表服务器接收的请求已成功处理,但在返回的响应报文种,不含实体部分,另外也不允许返回任何实体的主题
    比如:当从浏览器发出请求处理之后,返回204响应,那么浏览器显示的页面不发生更新
    一般只需要从客户端往服务器发送信息,而对客户端不需要发送新内容的情况下使用

    206 Partial Content

    该状态码表示客户端进行了范围请求,而服务器成功的执行了这部分的GET请求,响应报文种包含由Content-Range指定范围的实体部分


    3xx重定向

    301 Moved Permanently

    永久性重定向,该状态码表示请求的资源已被分配了新的URL,以后应使用资源现在所指的URI

    302 Found

    临时性重定向,该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问

    303 See Other

    该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求资源

    当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次 发送。
    301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使 用时大家都会这么做

    304 Not Modified

    该状态码表示客户端发送附带条件的请求 时,服务器端允许请求访 问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应 的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关 系。

    307 Temporary Redirect

    临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准

    禁止 POST 变换成 GET,但实际使用时大家并不遵守。 307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响 应时的行为,每种浏览器有可能出现不同的情况。


    4xx 客户端错误

    400 Bad Request

    该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求 的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态 码。

    401 Unauthorized

    该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示 用 户认证失败。

    403 Forbidden

    该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要 给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。
    未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发 送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因。

    404 Not Found

    该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服 务器端拒绝请求且不想说明理由时使用。


    5xx服务器错误

    500 Internal Server Error

    该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障

    503 Service Unavailable

    该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法 处理请求。如果事先得知解除以上状况需要的时间,最好写入 RetryAfter 首部字段再返回给客户端。

    状态码和状况的不一致
    不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。 比如 Web 应用程序内部发生错误,状态码依然返回 200 OK,这种 情况也经常遇到。

    展开全文
  • erp系统是什么意思

    千次阅读 2021-05-28 09:20:08
    如今,ERP 系统对于管理所有行业的小型,中型和企业业务至重要。 新的 ERP 系统绝不是基本的。它们可以跨业务的各个方面提供智能,可见性,分析和效率。利用最新技术,ERP 系统可以促进跨部门和生态系统的实时...

    ERP 代表企业资源规划,它指的是公司企业或组织机构用于管理日常业务活动的系统和软件包,例如会计,采购,项目管理和制造。ERP 系统连接在一起并定义了大量的业务流程,并支持它们之间的数据流。通过从多个来源收集组织的共享事务数据,ERP 系统消除了数据重复,并通过“单一事实来源”提供数据完整性。如今,ERP 系统对于管理所有行业的小型,中型和企业业务至关重要。

    ERP

    新的 ERP 系统绝不是基本的。它们可以跨业务的各个方面提供智能,可见性,分析和效率。利用最新技术,ERP 系统可以促进跨部门和生态系统的实时信息流,从而使企业能够制定数据驱动的决策并实时管理绩效。

    ERP 系统由企业资源规划应用程序(“ERP 模块”)组成,它们相互通信并共享数据库。这意味着您可以消除部门之间的信息孤岛,并为每个人提供单一的事实来源。您的系统可以自动化您的核心业务流程,帮助您确保合规性,降低风险,快速跟踪报告等等。

    ERP 系统通常包括会计,人力资源,销售 CRM 和供应链管理的应用程序。但您可以组合不同的模块以更好地满足您的需求。例如,您可以为电子商务,库存和订单管理以及履行添加 ERP 组件。或者包括为制造业和零售业等广泛行业设计的应用程序。

    展开全文
  • STCs 编码讲解-晴骁

    2018-10-28 18:58:47
    STCs 编码讲解-晴骁,想要对STC编码深入了解的大牛看过来。
  • 虽然OVSF正交扩频是完全的正交,能够实现在扩频的同时,能够实现分复用。但由于完全OVSF的数量太少,资源有限,这限制了其实际系统中的适用范围。 具有伪随机特性的扰,同时具备了近似正交的特性,相同...

    1. OVSF正交扩频码+扰码的混合编码方案

    虽然OVSF正交扩频码是完全的正交码,能够实现在扩频的同时,能够实现码分复用。但由于完全OVSF的数量太少,资源有限,这限制了其实际系统中的适用范围。

    具有伪随机特性的扰码扰码,同时具备了近似正交的特性,相同的比特长度的情况下,其码资源的数量远远大于OVSF正交扩频码的数量,这使得扰码在多用户复用与解复用的场合有了一定的应用空间,弥补了OVSF正交扩频码的不足。

    在实际的WCDM系统中,采用了OVSF正交扩频码+扰码的混合编码方案,在复用和解复用的过程用来标识物理小区、物理信道和用户,同时能够实现扩频的功能。

    • 下行复用

    • 上行解复用

     

    2. 物理层信道与地址码

    从上图可以看出:

    (1)OVSF正交扩频码主要用于区分不同物理信道和专有信道

    (2)扰码主要用于区分不同的小区,区分小区时,有分为主扰码与辅助扰码。

     

    3. WCDMA中与地址吗相关的常见概念:

    (1)OVSF正交扩频码:

    OVSF是Orthogonal Variable Spreading Factor的缩写,叫正交可变扩频因子,系统根据扩频因子的大小给用户分配资源,数值越大,提供的带宽越小。

    (2)Walsh函数

    是J.L.Wash于1923年提出的在一个归一化区间(0,1)上产生完备的正交码的函数系统。

    (3)信道码,扩频码,OVSF码三者的关系

    如果将ovsf乘以调制后的信号,就是扩频,OVSF码就是扩频码。

    如果将ovsf用于复用与解复用,OVSF码是信道码,用于区分不同的物理信道。

    (4)伪随机码序列(PN码)

    伪随机码序列具有类似于随机序列的基本特性,是一种貌似随机但实际上是有规律的周期性二进制序列

    (5)m序列码

    在所有的伪随机序列中,m序列是最重要、最基本的一种伪随机序列,它容易产生、规律性强、有很好的自相关性和较好的互相关特性。

    (6)Gold码序列

    是一种基于m序列的码序列,具有较优良的自相关和互相关特性,产生的序列数多。Gold码的自相关性不如m序列,具有三值自相关特性;互相关性比m序列要好,但还没有达到最佳。

     

     

     

     

     

     

    展开全文
  • java爬虫

    千次阅读 多人点赞 2019-04-12 11:59:12
    什么是爬虫 ​ 爬虫的价值 ​ 爬虫的分类 ​ 通用的爬虫 ​ 垂直的爬虫 ​ 爬虫的基本原理 爬虫的三大模块: ​ 获取数据 ​ 解析数据 ​ 保存数据 案例一: 爬取起点中文网的小说案例 案例二: 使用爬虫程序登录...

    1. 爬虫的基本概念

    1.1 什么是爬虫:

    ​ 网络爬虫是一个程序, 采用一种特定的解析结构来获取互联网中数据的, 爬虫一般分为三大模块: 获取数据, 解析数据, 保存数据

    1.2 爬虫的价值:

    网络爬虫的价值其实就是数据的价值, 一切皆为数据, 例如: 用户的信息,分析用户的维度, 商品的信息,竞价的网站

    1.3 爬虫的分类:

    1.3.1 通用的爬虫:

    ​ 指的就是爬虫互联网中所有的信息, 例如: 百度 谷歌

    1.3.2 垂直爬虫:

    ​ 指的爬取某个行业或者某个网站或者某个分类下的信息,这样的爬虫程序, 垂直爬虫 例如: 慢慢网, 笔趣阁

    在开发过程中, 大部分开发的都是垂直爬虫,

    1.4 爬虫的基本原理

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s2DZvhH4-1605084008952)(…\图片\01-爬虫的基本原理.png)]

    爬虫基本原理:

    1. 确定爬虫的url
    2. 发起http请求, 获取数据
    	1. 原始的jdk的方式: get  post
    	2. httpClient  get  post
    3. 解析获取到数据
    	1. jsoup 
    4. 保存数据
    	1. JDBC
    	2. DButils
    	3. JDBCTemplate(Spring)
    	4. mybatis
    

    2. 爬虫的三大模块:

    2.1第一大模块: 获取数据

    获取数据的过程, 其实就是发送一个http请求, 获取其响应的内容

    2.1.1回顾: http

    • get请求和post的请求的区别:
        1. 请求方式不同
        1. get没有请求体, post有请求体
        1. get请求数据拼接在url后面 ?username=zs&password=123, post将请求参数放置在请求体中
    • 请求头:
      • user-agent: 指定当前使用的浏览器的版本
      • cookie: 携带当前网站的cookie信息
    • 响应头:
      • Location: 一般和302结合使用, 进行重定向
      • set-cookie: 服务器向浏览器写入cookie的信息
    • 常见的状态码:
      • 200: 请求成功
      • 302: 重定向
      • 304: 缓存浏览器的内容
      • 404: 资源不存在
      • 500: 服务端错误

    2.1.2使用jdk的方式发起http请求:

    • 发送get请求:
    //演示 jdk 的get请求方式
    public class JDKget {
    
    
        public static void main(String[] args) throws Exception {
            //1. 创建URL对象
            URL url = new URL("http://www.itcast.cn");
    
            //2. 打开一个连接
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
    
            //3. 设置请求方式
            urlConnection.setRequestMethod("GET");//此处必须使用大写, 默认是get请求
    
            //4. 获取输入流
            InputStream in = urlConnection.getInputStream();
    
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
    
            //5. 获取数据
            String len = null;
            while((len = bufferedReader.readLine())!=null){
    
                System.out.println(len);
            }
    
            //6. 关流
            bufferedReader.close();
            in.close();
        }
    
    }
    
    
    • 发生post请求
    //演示jdk发送post请求
    public class JDKpost {
    
        public static void main(String[] args) throws Exception {
            //1. 创建url对象
            URL url = new URL("http://www.itcast.cn");
    
            //2. 建立连接
           HttpURLConnection connection  = (HttpURLConnection) url.openConnection();
    
           //3. 设置请求方式
           connection.setRequestMethod("POST");
           //如果要有使用jdk的方式发送post请求, 需要设置doOutput为true
           connection.setDoOutput(true);
           //4. 设置参数
            OutputStream out = connection.getOutputStream();
            out.write("username=zs&password=123".getBytes());
    
            //5. 获取响应体, 获取输入流
            InputStream in = connection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
            String len = null;
            while((len = bufferedReader.readLine())!=null){
    
                System.out.println(len);
            }
    
            //6. 关流
            bufferedReader.close();
            in.close();
    
        }
    
    }
    
    

    总结:

    ​ 实现的步骤:

    1. 创建url对象, 指定url路径

    2. 打开一个连接, 获取连接对象(HttpURLConnection)

    3. 设置请求方式

      1. 如果是post, 需要设置两个参数:

        设置输出数据, 和 doOutPut设置为true

      2. 获取输入流(获取响应体)

      3. 读取输入流中的数据

      4. 关流

    2.1.3 使用 httpClient完成http请求

    httpclient是一个专为用来做http请求的工具, 是Apache开发

    使用步骤:

    第一步: 导包
    	  <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.4</version>
            </dependency>
    
    • get请求
    //演示 httpclient的get请求
    public class HTTPClientGet {
    
        public static void main(String[] args) throws IOException {
            //1. 创建httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //2. 创建get请求对象
            HttpGet httpGet = new HttpGet("http://www.itcast.cn");
    
            //3. 发送一个请求
            CloseableHttpResponse response = httpClient.execute(httpGet);
      
            //4. 获取状态码
            int statusCode = response.getStatusLine().getStatusCode();
            System.out.println(statusCode);
            if(statusCode==200){
                //获取响应体(数据)
                String html = EntityUtils.toString(response.getEntity(), Charset.forName("utf-8"));
                System.out.println(html);
            }
        }
    }
    
    • post请求
    //演示 httpclient 发送post请求
    public class HTTPClientPost {
    
        public static void main(String[] args) throws Exception {
            //1. 创建 httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //2. 创建post请求对象
            HttpPost httpPost = new HttpPost("http://www.itcast.cn");
    
            //3. 设置请求参数
            List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
            list.add(new BasicNameValuePair("usernam","zs"));
            list.add(new BasicNameValuePair("password","123"));
    
            HttpEntity entity = new UrlEncodedFormEntity(list);
            httpPost.setEntity(entity);
    
            //4. 发送数据
            CloseableHttpResponse response = httpClient.execute(httpPost);
            //5. 获取数据
            Header[] headers = response.getHeaders("Date");
          
            System.out.println(headers[0].getValue());
            System.out.println(EntityUtils.toString(response.getEntity(),"utf-8"));
    
        }
    }
    

    总结:

    ​ get请求:

    1. 创建httpclient对象:HttpClients.createDefault();

      1. 创建请求对象(httpget)

      2. 发送请求: httpclient.execute(httpGet);

      3. 获取数据:

        1. 1 获取状态码

      1.2 获取响应头

      1.3 获取响应体

    post请求:

    ​ 1.创建httpclient对象: HttpClients.createDefault();

    ​ 2.创建请求对象(httpPost)

    ​ 3.设置参数: httpPost.setEntity(entity)

       List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
            list.add(new BasicNameValuePair("usernam","zs"));
            list.add(new BasicNameValuePair("password","123"));
    
            HttpEntity entity = new UrlEncodedFormEntity(list);
    

    ​ 4.发送请求:httpclient.execute(httpPost);

    ​ 5.获取数据:

    ​ 1.1获取状态码

    ​ 1.2获取响应头

    ​ 1.3 获取响应体

    2.2 第二大模块: 解析数据

    解析数据, 其实就是解析HTML文档,js中dom操作就是在解析HTML文档

    2.2.1 Document 对象集合

    集合描述
    [all]提供对文档中所有 HTML 元素的访问。
    [anchors]返回对文档中所有 Anchor 对象的引用。
    applets返回对文档中所有 Applet 对象的引用。
    [forms]返回对文档中所有 Form 对象引用。
    [images]返回对文档中所有 Image 对象引用。
    [links]返回对文档中所有 Area 和 Link 对象引用。

    2.2.2 Document 对象属性

    属性描述
    body提供对 元素的直接访问。 对于定义了框架集的文档,该属性引用最外层的 。
    cookie设置或返回与当前文档有关的所有 cookie。
    domain返回当前文档的域名。
    lastModified返回文档被最后修改的日期和时间。
    referrer返回载入当前文档的文档的 URL。
    title返回当前文档的标题。
    URL返回当前文档的 URL。

    2.2.3 Document 对象方法

    方法描述
    close()关闭用 document.open() 方法打开的输出流,并显示选定的数据。
    getElementById()返回对拥有指定 id 的第一个对象的引用。
    getElementsByName()返回带有指定名称的对象集合。
    getElementsByTagName()返回带有指定标签名的对象集合。
    open()打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。
    write()向文档写 HTML 表达式 或 JavaScript 代码。

    2.2.4 jsoup概念:

    ​ jsoup是一个专门为HTML解析而生的工具,提供了丰富解析方案, 一种使用类似于js中原生dom操作的方案 , 一种是类似于jQuery(css选择器)中选择器的方案

    2.2.5 jsoup的入门:

    • 第一步: 导包
    	<dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.10.3</version>
            </dependency>
    
    • 第二步: 获取document对象
    public class JsoupToDocument {
    
        public static void main(String[] args) throws IOException {
            //1. 获取document对象:通过url获取document
            //Document document = Jsoup.connect("http://www.itcast.cn").get();
            //1.1. 获取网页的标题
            //String title = document.title();
            //System.out.println(title);
    
            //2. 获取document: 通过HTML文档获取
           // Document document = Jsoup.parse("<!DOCTYPE html>\n" +
                    "<html lang=\"en\">\n" +
                    "<head>\n" +
                    "    <meta charset=\"UTF-8\">\n" +
                    "    <title>黑马程序员</title>\n" +
                    "</head>\n" +
                    "<body>\n" +
                    "\n" +
                    "</body>\n" +
                    "</html>");
    
           // String title = document.title();
            //System.out.println(title);
            //3. 通过本地html文件获取document对象
          //  Document document = Jsoup.parse(new File(""), "utf-8");
    
            //4. 通过html片段获取
           // Document document = Jsoup.parseBodyFragment("<a href='http://www.itcast.cn'>传智博客</a>");
        }
    
    }
    

    总结: 四种

    ​ 1.通过url路径的方式获取

    ​ 2.通过HTML文档的形式获取(重点)

    ​ 3.通过本地HTML文件的形式获取

    ​ 4.通过HTML片段形式获取

    • 第三步: 解析数据(如何解析document)

      选择器例子例子描述CSS
      .class.intro选择 class=“intro” 的所有元素。1
      #id#firstname选择 id=“firstname” 的所有元素。1
      **选择所有元素。2
      elementp选择所有

      元素。

      1
      element,elementdiv,p选择所有
      元素和所有

      元素。

      1
      element elementdiv p选择
      元素内部的所有

      元素。

      1
      element>elementdiv>p选择父元素为
      元素的所有

      元素。

      2
      element+elementdiv+p选择紧接在
      元素之后的所有

      元素。

      2
      [attribute][target]选择带有 target 属性所有元素。2
      [attribute=value][target=_blank]选择 target="_blank" 的所有元素。2
      [attribute~=value][title~=flower]选择 title 属性包含单词 “flower” 的所有元素。2
      [attribute|=value][lang|=en]选择 lang 属性值以 “en” 开头的所有元素。2
      :linka:link选择所有未被访问的链接。1
      :visiteda:visited选择所有已被访问的链接。1
      :activea:active选择活动链接。1
      :hovera:hover选择鼠标指针位于其上的链接。1
      :focusinput:focus选择获得焦点的 input 元素。2
      :first-letterp:first-letter选择每个

      元素的首字母。

      1
      :first-linep:first-line选择每个

      元素的首行。

      1
      :first-childp:first-child选择属于父元素的第一个子元素的每个

      元素。

      2
      :beforep:before在每个

      元素的内容之前插入内容。

      2
      :afterp:after在每个

      元素的内容之后插入内容。

      2
      :lang(language)p:lang(it)选择带有以 “it” 开头的 lang 属性值的每个

      元素。

      2
      element1~element2p~ul选择前面有

      元素的每个

      • 元素。

      3
      [attribute^=value]a[src^=“https”]选择其 src 属性值以 “https” 开头的每个 元素。3
      [attribute$=value]a[src$=".pdf"]选择其 src 属性以 “.pdf” 结尾的所有 元素。3
      [attribute*=value]a[src*=“abc”]选择其 src 属性中包含 “abc” 子串的每个 元素。3
      :first-of-typep:first-of-type选择属于其父元素的首个

      元素的每个

      元素。

      3
      :last-of-typep:last-of-type选择属于其父元素的最后

      元素的每个

      元素。

      3
      :only-of-typep:only-of-type选择属于其父元素唯一的

      元素的每个

      元素。

      3
      :only-childp:only-child选择属于其父元素的唯一子元素的每个

      元素。

      3
      :nth-child(n)p:nth-child(2)选择属于其父元素的第二个子元素的每个

      元素。

      3
      :nth-last-child(n)p:nth-last-child(2)同上,从最后一个子元素开始计数。3
      :nth-of-type(n)p:nth-of-type(2)选择属于其父元素第二个

      元素的每个

      元素。

      3
      :nth-last-of-type(n)p:nth-last-of-type(2)同上,但是从最后一个子元素开始计数。3
      :last-childp:last-child选择属于其父元素最后一个子元素每个

      元素。

      3
      :root:root选择文档的根元素。3
      :emptyp:empty选择没有子元素的每个

      元素(包括文本节点)。

      3
      :target#news:target选择当前活动的 #news 元素。3
      :enabledinput:enabled选择每个启用的 元素。3
      :disabledinput:disabled选择每个禁用的 元素3
      :checkedinput:checked选择每个被选中的 元素。3
      :not(selector):not§选择非

      元素的每个元素。

      3
      ::selection::selection选择被用户选取的元素部分。3
      • 原生的dom解析(了解)
      public class JsoupToParse {
      
          @Test
          public void jsoupToDomParse() throws IOException {
              //1. 获取document
              Document document = Jsoup.connect("http://www.itcast.cn/subject/cloudzly/index.shtml").get();
      
              //1.1 获取文档的标题
              String title = document.title();
              System.out.println(title);
      
              //1.2
              Elements elements = document.getElementsByClass("head");
              Element element = elements.get(0);
              elements = element.getElementsByClass("inner");
              //System.out.println(elements.size());
              element = elements.get(0);
              Elements lis = element.getElementsByTag("li");
              /*for (Element li : lis) {
                  System.out.println(li.);
              }*/
              Elements a = lis.get(0).getElementsByTag("a");
              String text = a.text();
              System.out.println(text);
          }
      }
      
      • 选择器的方案
          //使用jsoup的选择器来解析网页的数据
          @Test
          public void jsoupToSelectParse() throws IOException {
              //1.获取document对象
              Document document = Jsoup.connect("http://www.itcast.cn/subject/cloudzly/index.shtml").get();
      
              //2. 获取标题
              Elements title = document.select("title");
              System.out.println(title.text());
      
              //3. 获取 云计算大数据培训 内容
              //Elements elements = document.select(".head .inner li");
              Elements elements = document.select("body > div.wrap > div.head > div > ul > li:nth-child(1) > a");
              /*Element element = elements.get(0);
              Elements a = element.select("a");*/
              System.out.println(elements.text());
          }
      }
      
          //获取网易新闻的内容
          @Test
          public void jsoupTo163Parse() throws IOException {
              Document document = Jsoup.connect("http://news.163.com/18/0727/08/DNN5HCQU0001875N.html").get();
      
              //1. 解析新闻的标题
              Elements elements = document.select("#epContentLeft");
              Elements h1 = elements.select("h1");
              System.out.println(h1.text());
              //2. 获取新闻的来源
              Elements laiyuan = document.select("#ne_article_source");
      
              System.out.println(laiyuan.text());
              //3. 获取新闻的正文
              Elements ps = document.select("#endText p");
              for (Element p : ps) {
                  System.out.println(p.text());
              }
          }
      }
      

    2.3 第三大模块: 保存数据

    目前采用的保存到mysql数据库中, 以后hadoop, hbase

    四种方案:

    ​ jdbc:

    ​ dbutils:

    ​ jdbcTemplate

    ​ mybatis

    3. 案例一:爬起起点中文网的小说

    //需求: 爬取起点中文网中任意一个榜单的小说
    public class QiDianSprider {
    
        public static void main(String[] args) throws IOException {
            //1. 确定爬取的url
            String url = "https://www.qidian.com/";
    
            //2. 发起请求获取数据: httpClient
            //2.1 创建httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //2.2 创建请求方式: get
            HttpGet httpGet = new HttpGet(url);
    
            //2.3 发起请求获得响应
            CloseableHttpResponse response = httpClient.execute(httpGet);
    
            String html = EntityUtils.toString(response.getEntity(), "utf-8");
    
            //3.解析数据: jsoup
            Document document = Jsoup.parse(html);
            Elements elements = document.select("div[class=rank-list sort-list]");
    
            Elements lis = elements.select(".book-list ul li");
            //System.out.println(lis.size());
            Elements as = lis.select("a[href^=//book.qidian.com]:not([class=link])");
    
    
            for (Element a : as) {
                String href = a.attr("href");
                //   http://book.qidian.com/info/1012284323
                //System.out.println(href);
                //拼接url
                href = "https:" + href;
                //System.out.println(href);
                //重新发起请求, 获取每一个小说页面
                httpClient = HttpClients.createDefault();
                httpGet = new HttpGet(href);
                response = httpClient.execute(httpGet);
    
                html = EntityUtils.toString(response.getEntity(), "utf-8");
    
                document = Jsoup.parse(html);
    
                //解析小说详情页
                elements = document.select("#readBtn");
                href = elements.attr("href");
                //拼接小说内容的url
                href = "https:" + href;
                System.out.println(href);
    
                while (true) {
                    //重新发起请求, 获取每一个小说页面
                    httpClient = HttpClients.createDefault();
                    httpGet = new HttpGet(href);
                    response = httpClient.execute(httpGet);
    
                    html = EntityUtils.toString(response.getEntity(), "utf-8");
                    //获取到小说内容页数据
                    document = Jsoup.parse(html);
    
                    //获取小说的名称
                    elements = document.select(".book-cover-wrap h1");
                    System.out.println("小说名称:" + elements.text());
                    //获取章节名称
                    elements = document.select(".j_chapterName");
                    System.out.println("章节名称" + elements.text());
                    //获取小说的内容
                    elements = document.select("div[class=read-content j_readContent] p");
                    for (Element element : elements) {
                        System.out.println(element.text());
                    }
    
                    //获取下一章节的url
                    elements = document.select("#j_chapterNext");
                    href = elements.attr("href");
    
                    if(href==null||href==""||href==" "){
                        System.out.println("跳出本小说内容");
                        break;
                    }
    
                    href = "https:" + href;
                }
    
            }
        }
    }
    

    4. 案例二: 模拟登陆

    //需求: 模拟登陆, 将登陆后的用户的数据获取到
    public class LoginSpider {
    
        public static void main(String[] args) throws Exception {
            //1.确定url
            String url = "http://www.svn.club/user/login";
    
            //2. 发起请求, 获取数据
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //3. 创建请求方式: post
            HttpPost httpPost =new HttpPost(url);
    
            //4. 设置参数
            List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
    
            list.add(new BasicNameValuePair("uid","itcast"));
            list.add(new BasicNameValuePair("pwd","www.itcast.cn"));
            list.add(new BasicNameValuePair("x","97"));
            list.add(new BasicNameValuePair("y","29"));
            HttpEntity entity = new UrlEncodedFormEntity(list);
            httpPost.setEntity(entity);
    
            //5. 设置浏览器的类型: 模拟浏览器的
            httpPost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36");
            //6.发起请求
            CloseableHttpResponse response = httpClient.execute(httpPost);
            
            //7. 获取响应的内容
           // String html = EntityUtils.toString(response.getEntity(), "utf-8");
            //7. 获取状态码
            int statusCode = response.getStatusLine().getStatusCode();
            if(statusCode==302){
    
                Header[] locations = response.getHeaders("Location");
                Header[] cookies = response.getHeaders("Set-Cookie");
    
                String reURL = locations[0].getValue();
                String cookie = cookies[0].getValue();
               // System.out.println(reURL);
                //拼接url
                reURL = "http://www.svn.club"+reURL;
    
                //重新发送请求, 获取登陆后的数据
                httpClient = HttpClients.createDefault();
                HttpGet httpGet = new HttpGet(reURL);
    
                httpGet.setHeader("Cookie",cookie);
                response = httpClient.execute(httpGet);
                String html = EntityUtils.toString(response.getEntity(), "utf-8");
                Document document = Jsoup.parse(html);
                //System.out.println(document);
                Elements elements = document.select(".tb");
                Element element = elements.get(0);
    
                Elements trs = element.select("tr");
                Element element1 = trs.get(1);
    
                String aText = element1.select("td").get(0).select("a").text();
                System.out.println(aText);
    
            }
        }
    }
    
    

    作业:

    1. 演示 jdk发送get和post请求(www.itcast.cn)
    2. 演示httpClient发送post请求
    3. 寻找一个网页, 进行解析(解析传智博客的科目列表)
    4. 将案例一书写(200%)
    5. 将案例二写一遍
    
    展开全文
  • 浅析HTTP协议

    千次阅读 多人点赞 2016-07-30 17:24:37
    比如,表示的意思是有中文版的给我中文版的,没有的话英文也行。 Accept -Language : zh -cn ,zh; q = 0.7 , en -us ,en; q = 0.3 (5)Authorization Authorization首部字段是用来告知服务器用户代理的...
  • 什么是大数据风控? >>保险公司是怎么监视我们的? >>大数据风控时代,买保险要注意什么? 近几年,想必大家都真真切切地感受到了大数据,已经出现在了我们生活中的方方面面。 比如打开淘宝,推
  • CE是什么

    千次阅读 2017-04-17 17:24:46
    CE是什么? Cheat Engine它允许你修改你的游戏 内存,所以你将得到其他人没有的功能。它包括16进制编辑反汇编程序,内存查找工具。与同类修改工具相比,它具有强大的反汇编功能,且自身附带了修改器制作工具,可以...
  • dalvik字节问答

    千次阅读 2016-05-10 19:52:18
    什么是字节? 字节的长度怎么计算? 字节的格式是什么? const类指令有那些? 和类、对象操作相关的指令有哪些? switch相关指令是怎么回事? Array数据操作指令有那些? quick类型的指令有那些,起到什么作用...
  • 开放标准对于云计算的发展是至重要的,并且开源软件已经为众多的云计算实例提供了基础。 云的基本概念,是通过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再由多部服务器所组成的庞大系统搜索、...
  • 集成学习—随机森林原理(理解与论文研读)

    千次阅读 多人点赞 2019-08-21 17:44:40
    :给出了猜想,但是没有证明(至于它和Adaboost是什么关系还值得后续探讨研究); 输出噪声的影响 :Adaboost对标签数据有噪音很敏感,随机森林影响很小; 具有许多弱输入的数据 :对于弱输入,森林似乎有能力...
  • 开、主轴 置模式旋钮在“JOG”, "JOG INC"或“MPG”位置。按 按钮开、关机床主轴 启动程序加工零件 置模式旋钮在“AUTO”位置 选择一个数控程序按数控程序运行控制开关中的 按钮 试运行程序 试运行程序时,机床和...
  • OKR与CFR管理模式(一)-什么是OKR?

    千次阅读 2019-05-19 11:43:22
    OKR的四大利器 对优先事项的聚焦和承诺 高效的组织应该聚焦重要的工作,同时清楚什么是不重要的,领导层面临艰难抉择时,,OKR可推动其作出选择,对于部门、团队,和个人来说,OKR是一种精准的沟通的工具,能够消除...
  • 字节文件魔数0xCAFEBABE

    千次阅读 2020-03-25 14:03:40
    字节文件魔数0xCAFEBABE 每一个java字节文件(.class)都是以相同的4字节内容开始的——十六进制的CAFEBABE。 咖啡宝贝…因缺思厅。。。 public class HelloMagicNumber { public static void main(String[] args...
  • 刚接触安全的时候偶然间发现了这个小游戏,当时凭自己一点点的基础知识闯过了4、5这样子,然后就一头雾水了。这个游戏也一直躺在我的收藏夹里。不想前几天偶然打开发现和ctf题目很类似。于是又捡了起来并通了,...
  • 关于移位密码的破解问题

    千次阅读 2019-04-08 21:27:11
    考虑明文有逻辑意思的情况下,其实求解这道题并不是很难,因为字母表里一共有26个字母,其实也不多,大不了一个一个去尝试,即假设密文M对应的明文是A(或者是其他明文字母,这里为了陈述先设成A),则密文Q对应的...
  • 四旋翼飞行器10——华科尔DEVO-10遥控和RX1002接收机对 http://forum.eepw.com.cn/thread/259865/1/ http://www.321mx.com/blog/925.html
  • 心理辅导平台设计

    千次阅读 2017-12-04 10:22:57
    声明:作者对本文档保留所有权利。 原题目: 软件工程课程设计 ——心理学指导软件 学生学院 机电工程学院 专业班级 ****** 团队名称 “何弃疗” 队员姓名 *** *** *** *** 2014年12月16日 目录一、团队介绍 ...
  • 常见状态(必须掌握)

    千次阅读 2020-08-24 16:44:10
    但是这个过程并不百分百成功,并且情况也很复杂,所以状态就起到至重要的作用的作用。 HTTP状态分类: HTTP状态由三个十进制数字组成,第一个十进制数字定义了状态的类型,后两个数字没有分类的作用。HTTP...
  • GB28181国标错误整理

    万次阅读 2020-02-18 16:00:57
    错误定义 错误 错误宏定义 说明 0 ERR_COMMON_SUCCEED 执行成功 1 ERR_COMMON_FAIL 执行失败 2 ERR_COMMON_INVALID_PARAM 输入参数非法 3 ERR_COMMON_NO_MEMORY 系统内存不足 4 ERR_COMMON_SYS_FAIL 系统...
  • 上面的错误意思是在/lib64/security/ 下面找不到pam_tally.so,而我进入到目录下,确实没找到这个文件,解决方法是将现有的 pam_tally2.so做个软连接到pam_tally.so [root@iZ2zee7gmy40tbverl53rfZ ~]# cd /lib64/...
  • 一、ASCII、机内码、区位、国标、Unicode他们之间是如何转换的,方程式是什么 汉字系统中的过程包括区位、国标和机内码,其中的转换关系如下: 1.区位(十进制)转换成区位(十六进制)。 这里要把...
  • 面试常问有关响应状态3XX

    千次阅读 2018-12-25 13:36:01
    前端开发的小伙伴们是不经常被问到3xx响应状态一般咱们前端小伙子知道的 3xx属于的是重定向范围,但是面试官一般会问到这几个常用的301、302、303、304、307这几个状态的作用和区别。那么301代表什么301的英文是...
  • java js 汉字对应拼音,五笔转换

    千次阅读 2019-09-27 07:38:57
    最近做项目的时候,要求将汉字名称自动生成拼音和五笔,用于搜索,排列分组等 例如: 在记录中生成拼音和五笔保存,可由于后续查询搜索 下图中就可根据拼音或者五笔输入到名称里查询信息——具体...
  • session是什么?

    千次阅读 多人点赞 2018-04-08 16:26:42
    我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,学过计算机的应该都知道这个协议,它是无状态的,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。但是这种无状态...
  • 什么是 web 框架?

    千次阅读 2018-04-22 11:46:42
    什么是 web 框架? Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式。从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的。我发现很多人都热衷于学习 web ...
  • OAuth 2.0 ——授权模式

    千次阅读 2017-11-22 17:22:44
    refresh token:用途,看字面意思就知道,刷新令牌,当 access token 过期之后刷新出新的 access token。那就与上面的说法又矛盾了,这样一来的话,那不就是说可以一直使用 refresh token 来刷新出有效的 access ...
  • 在 Android Runtime (ART) 上验证应用行为

    千次阅读 2017-12-21 17:16:18
    Android Runtime (ART) 是运行 Android 5.0(API 级别 21)及更高版本的设备的默认运行时。 此运行时提供了多种可改善 Android 平台和应用的性能和流畅度的功能。 您可以在 ART 简介中找到关于 ART 新功能的更多...
  • Mesh学习笔记-入门篇

    千次阅读 2019-08-26 15:58:12
    (什么意思?) 就是说他只是表明了一个量,但这个两你可以用在很多的场合,比如一个温度值,她并没有体现这里温度值和什么相关。在蓝牙mesh里面的属性它提供一个来解释Characteristic的上下文。举个例子。如果有一个...
  • 浏览器提示的"不安全"到底是什么

    万次阅读 多人点赞 2020-04-04 21:34:29
    说实话, 我不知道这么设计是为什么, 可能是用加密层要花更多时间和流量, 也有可能是电脑上的浏览器的某些插件在作祟(褒义的那种), 但是从此可以联想到, 你是不是曾经有过在手机看网页, 突然跳出了一个广告, 还是不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,474
精华内容 12,989
关键字:

关码是什么意思