Python基础知识进阶之数据爬虫

 一、爬虫概述

       爬虫是指利用网络抓取模块对某个网站或者某个应用中有价值的信息进行提取。还可以模拟用户在浏览器或者APP应用上的操作行为,实现程序自动化。简单来说就是我们把互联网有价值的信息都比喻成大的蜘蛛网,而各个节点就是存放的数据,而蜘蛛网的上蜘蛛比喻成爬虫,而爬虫是可以自动抓取互联网信息的程序,从互联网上抓取一切有价值的信息,并且把站点的信息爬到本地并且存储方便使用。


二、爬虫构架

       Python爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序(爬取的有价值数据)。

       1.调度器:相当于一台电脑CPU,主要负责调度URL管理器、下载器、解析器之间协调工作

       2.URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL,实现URL管理器主要用三种方式,通过内存、数据库、缓存数据库来实现。 

       URL(外文名:Uniform Resource Locator,中文名:统一资源定位符),统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。通常由网络协议、服务器域名、资源在服务器中位置组成。例如我们最熟悉的豆瓣电影排行榜TOP250 https://movie.douban.com/top250

http - - 网络协议         movie.douban.com - - 服务器域名        top250 - - 资源在服务器中位置

       3.网页下载器:通过传入一个URL地址来下载网页,将网页转换成一个字符串,网页下载器有urllib2(Python官方基础模块)包括需要登录、代理、和cookie,requests(第三方包)。

       4.网页解析器:将一个网页字符串进行解析,可以按照我们的要求来提取出我们有用的信息,也可以根据DOM树的解析方式来解析。网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据的时候就会非常的困难)、html.parser(Python自带的)、beautifulsoup(第三方插件,可以使用Python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(第三方插件,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 树的方式进行解析的。

       5.应用程序:就是从网页中提取的有用数据组成的一个应用。


三、爬虫流程

       1.发起请求:通过htttp协议向目标站点服务器发送发送一个包含headers(标头)、data(数据)等信息的request(请求),等待服务器响应。这个请求的过程就像我们打开浏览器,在浏览器地址栏输入一个网址然后点击回车。

       HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网( World Wide Web )服务器传输超文本到本地浏览器的传送协议。

        万维网是一个由许多互相链接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全局“统一资源标识符”(URI)标识;这些资源通过HTTP(Hypertext Transfer Protocol)传送给用户,而后者通过点击链接来获得资源。

       HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件、图片文件、查询结果等)。

       HTTPS 协议是 HyperText Transfer Protocol Secure(超文本传输安全协议)的缩写,是一种通过计算机网络进行安全通信的传输协议。

       HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。

       HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443

       2.获取响应: 如果服务器能正常响应,我们会得到一个response(请求),response(请求)的内容便是所要获取的内容,类型可能有html、json字符串,二进制数据(图片,视频等)等类型。这个过程就是服务器接收客户端的请求,进过解析发送给浏览器的网页html文件。  

       3.解析内容: 得到的内容可能是html,可以使用正则表达式,网页解析库进行解析。也可能是json,可以直接转为json对象解析。可能是二进制数据,可以做保存或者进一步处理。这一步相当于浏览器把服务器端的文件获取到本地,再进行解释并且展现出来。  

       4.保存数据: 保存的方式可以是把数据存为文本,也可以把数据保存到数据库,或者保存为特定的jpg、mp4 等格式的文件。这就相当于我们在浏览网页时,下载网页上的图片或者视频。


四、请求状态

       当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。

       1**  信息,服务器收到请求,需要请求者继续执行操作(100 - 客户端应继续请求);

       2**  成功,操作被成功接收并处理(200 - 请求成功);

       3**  重定向,需进一步的操作以完成请求(301 - 资源(网页等)被永久转移到其它URL);

       4**  客户端错误,请求包含语法错误或无法完成请求(404 - 请求资源(网页等)不存在);

       5**  服务器错误,服务器在处理请求的过程中发生了错误(500 - 内部服务器错误)。


五、请求方法

         HTTP 请求方式一共有 9 种,分别为 POST 、GET 、HEAD、PUT 、PATCH 、 OPTIONS 、DELETE 、CONNECT 、 TRACE 。其中前三种 POST 、GET 、HEAD 是 HTTP 1.0 定义的,后六种 PUT 、PATCH 、 OPTIONS 、DELETE 、CONNECT 、 TRACE 是 HTTP 1.1 定义的。

       1.GET请求指定的页面信息,并返回实体主体;

       2.HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头;

       3.POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改;

       4.PUT从客户端向服务器传送的数据取代指定的文档的内容;

       5.DELETE请求服务器删除指定的页面;

       6.CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器;

       7.OPTIONS允许客户端查看服务器的性能;

       8.TRACE回显服务器收到的请求,主要用于测试或诊断;

       9.PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。


六、网页构成

       1、HTML(超文本标记语言):网页的本质就是超文本标记语言,他是将网页的各个部分标记出来让浏览器进行解析的。

       2、CSS(层叠样式表):HTML用来进行标记,但是标记出来的网页比较混乱,美观程度比较差,CSS就是将HTML标记出来的内容合理摆放,并且对网页中的内容进行美化用的。即:HTML用来搭建一个框架,CSS用来美化这个框架。

       3、客户端脚本语言(JavaScript):JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,用来进行网站和客户的交互。

       HTML、CSS、JavaScript关系:HTML用来进行标记,CSS让页面更加美化、JavaScript来进行交互,分工很明确。

       4、web服务器:一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache、 Nginx 、IIS。

       5、数据库:数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。在web里面他是用来让服务器端脚本语言来调用的。常用的数据库:Oracle、MySQL、SQL Server、DB2、MariDB

       冗余度就是从安全角度考虑多余的一个量,这个量就是为了保障仪器、设备或某项工作在非正常情况下也能正常运转。


七、网页文档

Python基础知识进阶之数据爬虫_第1张图片

                    声明为 HTML文档 

       ..                   网页的根元素

       ..                元素包含了文档的元数据

              定义网页编码格式为 utf-8。

       ..<title>                      元素描述了文档的标题</span></p> <p><span style="color:#a2e043;">      </span><span style="color:#956fe7;"> <style type="text/css">       用于为 HTML 文档定义CSS样式信息。</span></p> <p><span style="color:#a2e043;">       </span><span style="color:#4da8ee;"><body>..</body>                表示用户可见的内容 </span></p> <p><span style="color:#a2e043;">     </span><span style="color:#fe2c24;">  <div>..</div>                      表示框架</span></p> <p><span style="color:#a2e043;">      </span><span style="color:#ff9900;"> <p>..</p >                          表示段落</span></p> <p><span style="color:#a2e043;">     </span><span style="color:#ffd900;">  </span><span style="color:#a2e043;"><ul>..</ul>                         定义无序列表</span></p> <p><span style="color:#a2e043;">       <ol>..</ol>                         定义有序列表 </span></p> <p><span style="color:#a2e043;">       <li>..</li>                           表示列表项 </span></p> <p><span style="color:#a2e043;">  </span><span style="color:#38d8f0;">    < img src="" alt="">           表示图片</span></p> <p><span style="color:#a2e043;">    </span><span style="color:#956fe7;">  <h1>..</h1>                      表示标题 </span></p> <p><span style="color:#a2e043;">      </span><span style="color:#956fe7;"><a href="">..</a >             表示超链接</span></p> <hr> <h2><span style="color:#4da8ee;">八、requests</span></h2> <h3><span style="color:#ff9900;">1.requests定义</span></h3> <p><span style="color:#fe2c24;">        </span><span style="color:#a2e043;">Requests 是一个基于 Python 的 HTTP 库,它是可以在 Python 内置模块的基础上进行高度封装,使得发出 HTTP 请求变得更加简单和方便。Requests 可以通过 Apache2 Licensed 许可证进行开发。使用 Requests 库可以轻松完成浏览器相关的任何操作,包括模拟浏览器的请求。Requests 库可以用于网络爬虫,使得爬虫能够更加便捷迅速地实现。</span></p> <h3><span style="color:#ff9900;">2.requests参数</span></h3> <p><span style="color:#ffd900;"><strong>       </strong></span><span style="color:#fe2c24;"><strong> requests.request(</strong></span><span style="color:#ffd900;"><strong>method</strong></span><span style="color:#fe2c24;"><strong>,</strong></span><span style="color:#a2e043;"><strong>url</strong></span><span style="color:#fe2c24;"><strong>,</strong></span><span style="color:#38d8f0;"><strong>**kwargs</strong></span><span style="color:#fe2c24;"><strong>)</strong></span></p> <p><span style="color:#ffd900;">       method:请求方式           </span><span style="color:#a2e043;">url: 请求网址</span><span style="color:#ffd900;">        </span><span style="color:#38d8f0;"> **kwargs:控制访问参数,为可选项。</span></p> <p><span style="color:#ffd900;">      </span><span style="color:#fe2c24;"> params: 请求参数,字典或字节序列作为参数传入,常用于发送 GET 请求时使用;</span></p> <p><span style="color:#ffd900;">      </span><span style="color:#ff9900;"> headers: 设置请求头,字典作为参数传入;</span></p> <p><span style="color:#ffd900;">       cookies: 字典cookies 值 , 用户身份信息;</span></p> <p><span style="color:#ffd900;">      </span><span style="color:#a2e043;"> proxies: 设置ip代理,字典作为参数传入;</span></p> <p><span style="color:#ffd900;">   </span><span style="color:#38d8f0;">    data:  字典、字节或文件对象作为参数;</span></p> <p><span style="color:#ffd900;">       json:  JSON格式的数据作为参数;</span></p> <p><span style="color:#ffd900;">       </span><span style="color:#4da8ee;">verify:  请求网站时是否需要验证证书,认证SSL证书开关;</span></p> <p><span style="color:#ffd900;">     </span><span style="color:#fe2c24;">  cert : 本地SSL证书</span></p> <p><span style="color:#ffd900;">      </span><span style="color:#ff9900;"> timeout: 设置响应时间,一旦超过,程序会报错;</span></p> <p><span style="color:#ffd900;">       allow_redirects: 是否允许重定向, 布尔类型数据,默认为Ture;</span></p> <p><span style="color:#ffd900;">     </span><span style="color:#a2e043;">  files: 上传文件相关参数,以字典或文件对象的形式传递;</span></p> <p><span style="color:#ffd900;">     </span><span style="color:#38d8f0;">  auth: 指定登陆时的账号和密码,元组作为参数传入,支持HTTP认证功能;</span></p> <p><span style="color:#ffd900;">       </span><span style="color:#956fe7;">stream:  获取内容立即下载开关,布尔值,默认为True,为True时会先下载响应头,当Reponse调用content方法时才下载响应体。</span></p> <h3><span style="color:#ffd900;">3.requests属性 </span></h3> <p><span style="color:#a2e043;">      </span><span style="color:#fe2c24;"> url:返回响应的URL地址;</span></p> <p><span style="color:#a2e043;">      </span><span style="color:#ff9900;"> status_code:返回响应状态码,例如200表示请求成功,404表示请求的资源不存在等;</span></p> <p><span style="color:#a2e043;">    </span><span style="color:#38d8f0;">   headers:返回响应头信息,是一个字典类型;</span></p> <p><span style="color:#a2e043;">      </span><span style="color:#956fe7;"> text:返回响应的内容,是一个字符串类型;</span></p> <p><span style="color:#a2e043;">    </span><span style="color:#4da8ee;">   content:返回响应的二进制内容,是一个bytes类型;</span></p> <p><span style="color:#a2e043;">       encoding:返回响应内容的编码格式;</span></p> <p><span style="color:#a2e043;">      </span><span style="color:#ff9900;"> cookies:返回响应的cookie信息,是一个字典类型;</span></p> <p><span style="color:#a2e043;">      </span><span style="color:#ffd900;"> json():返回响应的json格式数据,如果响应内容不是json格式,则会抛出异常;</span></p> <p><span style="color:#a2e043;">     </span><span style="color:#956fe7;">  history:返回请求历史,是一个列表类型,其中每个元素都是一个response对象。</span></p> <hr> <h2><span style="color:#fe2c24;">九、BeautifulSoup(bs4 )</span></h2> <h3>      <span style="color:#a2e043;"> </span><span style="color:#ff9900;">1.BeautifulSoup定义</span></h3> <p><span style="color:#a2e043;">       BeautifulSoup是一个工具箱,通过解析文档为用户提供需要抓取的数据。因为简单,所以不需要多少代码就可以写出一个完整的应用程序。  Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为UTF-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时你仅仅需要说明一下原始编码方式就可以了。  Beautiful Soup已成为和lXML、HTML一样出色的Python解释器,为用户灵活地提供不同的解析策略或强劲的速度。  所以说,利用它可以省去很多烦琐的提取工作,提高了解析效率。</span></p> <h3>     <span style="color:#38d8f0;">  </span><span style="color:#ffd900;">2.BeautifulSoup解析</span></h3> <table border="1" style="width:680px;"> <tbody> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:94px;"> <p style="text-align:center;"><span style="color:#ff9900;"><strong>解释器</strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:259px;"> <p style="text-align:center;"><span style="color:#ff9900;"><strong>用法</strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:178px;"> <p style="text-align:center;"><span style="color:#ff9900;"><strong>优点</strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:150px;"> <p style="text-align:center;"><span style="color:#ff9900;"><strong>缺点</strong></span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:94px;"> <p style="text-align:center;"><span style="color:#ffd900;">Python</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:259px;"> <p style="text-align:center;"><span style="color:#ffd900;">BeautifulSoup(markup, “html.parser”)</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:178px;"> <p style="text-align:center;"><span style="color:#ffd900;">Python的内置标准库、执行速度适中、文档容错能力强</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:150px;"> <p style="text-align:center;"><span style="color:#ffd900;">Python 2.7.3及Python 3.2.2之前的版本文档容错能力差</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:94px;"> <p style="text-align:center;"><span style="color:#a2e043;">xml HTML</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:259px;"> <p style="text-align:center;"><span style="color:#a2e043;">BeautifulSoup(markup, “lxml”)</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:178px;"> <p style="text-align:center;"><span style="color:#a2e043;">速度快、文档容错能力强</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:150px;"> <p style="text-align:center;"><span style="color:#a2e043;">需要安装C语言库</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:94px;"> <p style="text-align:center;"><span style="color:#4da8ee;">lxml XML</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:259px;"> <p style="text-align:center;"><span style="color:#4da8ee;">BeautifulSoup(markup, “xml”)</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:178px;"> <p style="text-align:center;"><span style="color:#4da8ee;">速度快、唯一支持XML的解析器</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:150px;"> <p style="text-align:center;"><span style="color:#4da8ee;">需要安装C语言库</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:94px;"> <p style="text-align:center;"><span style="color:#956fe7;">html5lib</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:259px;"> <p style="text-align:center;"><span style="color:#956fe7;">BeautifulSoup(markup, “html5lib”)</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:178px;"> <p style="text-align:center;"><span style="color:#956fe7;">最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;width:150px;"> <p style="text-align:center;"><span style="color:#956fe7;">速度慢、不依赖外部扩展</span></p> </td> </tr> </tbody> </table> <h3>       <span style="color:#a2e043;">3.BeautifulSoup方法</span></h3> <p><strong>       </strong><span style="color:#ff9900;"><strong>1)find_all()</strong>:搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件。返回值类型是bs4.element.ResultSet,是一个包含所有符合过滤条件的 tag子节点的列表。</span></p> <p>       <span style="color:#fe2c24;">find_all(</span><span style="color:#ffd900;">name</span><span style="color:#fe2c24;">, </span><span style="color:#a2e043;">attrs</span><span style="color:#fe2c24;">,</span><span style="color:#38d8f0;"> recursive</span><span style="color:#fe2c24;">, </span><span style="color:#956fe7;">text</span><span style="color:#fe2c24;">, </span><span style="color:#4da8ee;">**kwargs</span><span style="color:#fe2c24;">)</span></p> <p>        <span style="color:#ffd900;">name:要搜索的标签的名称或正则表达式。</span></p> <p>      <span style="color:#a2e043;">  attr :要匹配的标签属性。可以是一个字典或一个函数,函数返回 True 表示匹配成功。</span></p> <p>      <span style="color:#38d8f0;"> recursive 参数: 调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点。如果只想搜索tag的直接子节点,可以使用参数 recursive=False 。</span></p> <p>     <span style="color:#956fe7;"> text 参数:要搜索的文本。可以是一个字符串或一个函数,函数返回 True 表示匹配成功。</span></p> <p>      <span style="color:#4da8ee;"> **kwargs参数:其他参数将传递给Beautiful Soup解析器。</span></p> <p><strong>      </strong> <span style="color:#ffd900;"><strong>2)find()</strong>:同上,只不过返回的值是筛选到的第一个tag子节点,类型为bs4.element.Tag。</span></p> <p>    <span style="color:#fe2c24;"><strong>   </strong><strong>BeautifulSoup还有10个类似find_all()和find()的查找方法用来搜索文档的不同部分。</strong></span></p> <p><strong>       </strong><span style="color:#ff9900;">find_parent():查找父节点;<br>        find_parents():递归查找父节点。</span></p> <p>       <span style="color:#ffd900;">find_next_siblings():查找后面的兄弟节点;<br>        find_next_sibling():查找后面满足条件的第一个兄弟节点。</span></p> <p>       <span style="color:#a2e043;">find_previous_siblings():方法返回所有符合条件的前面的兄弟节点;<br>        find_previous_sibling():方法返回第一个符合条件的前面的兄弟节点。</span></p> <p>       <span style="color:#956fe7;">find_all_next():查找后面所有节点;<br>        find_next():查找后面第一个满足条件的节点。</span></p> <p>       <span style="color:#38d8f0;">find_all_previous():查找前面所有满足条件的节点;<br>        find_previous():查找前面第一个满足条件的节点。</span></p> <p>     <span style="color:#a2e043;">  <strong>3)selector():</strong>使用 CSS 选择器选取元素。支持大多数 CSS 选择器语法。</span></p> <p>    <strong>   </strong><span style="color:#38d8f0;"><strong>4)descendants():</strong>返回所有子孙元素。</span></p> <p>       <span style="color:#956fe7;"><strong>5)parents():</strong>返回所有祖先元素。</span></p> <p>     <span style="color:#4da8ee;"><strong>  6)next_siblings():</strong>返回当前元素之后的所有同级元素。</span></p> <p>     <span style="color:#ff9900;"> <strong> 7)previous_siblings():</strong>返回当前元素之前的所有同级元素。</span></p> <h3>     <span style="color:#38d8f0;">  4.BeautifulSoup属性</span></h3> <p><strong>      </strong><span style="color:#fe2c24;">1)tag.name: tag对应的名称;</span></p> <p>    <span style="color:#ffd900;">  2)tag.attrs: tag属性的键值对;</span></p> <p>      <span style="color:#a2e043;">3)tag['class']:tag属性class键对应的值,还可直接赋值进行修改;</span></p> <p>     <span style="color:#38d8f0;"> 4)tag.contents: 将tag的子节点以列表方式输出;</span></p> <p>    <span style="color:#956fe7;">  5)tag.children:返回tag的子节点迭代器;</span></p> <p>   <span style="color:#4da8ee;">   6)tag.descendants:可以对所有tag的子孙节点进行递归循环。</span></p> <h3>     <span style="color:#956fe7;">  5.BeautifulSoup方法</span></h3> <p>      <span style="color:#ff9900;">1)tag.get_text(): 获取tag中间的文本,可能包含子tag;</span></p> <p>     <span style="color:#ffd900;"> 2)tag.get(‘href’): 获取tag里href属性对应的值,等价于tag[‘href’]。</span></p> <hr> <h2><span style="color:#ff9900;">十、CSS选择器</span></h2> <h3><span style="color:#ffd900;">1.基本选择器</span></h3> <table border="1" style="width:680px;"> <tbody> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;"><strong>选择器</strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;"><strong>示例  </strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;"><strong> 说明</strong></span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">.class    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">.intro    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择class="intro"的所有节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">#id    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">#firstname    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择id="firstname"的所有节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">*    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">*    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择所有节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">element    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">p    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择所有p节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">element,element    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">div,p    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择所有div节点和所有p节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">element element    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">div p    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择div节点内部的所有p节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">element>element    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">div>p    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择父节点为div节点的所有p节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">element+element    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">div+p    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择紧接在div节点之后的所有p节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">element~element    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">p~ul    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择和p元素拥有相同父节点,并且在p元素之后的ul节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[attribute^=value]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">a[src^=“https”]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择其src属性值以"https"开头的每个a节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[attribute$=value]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">a[src$=".png"]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择其src属性以".png"结尾的所有a节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[attribute*=value]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">a[src*=“abc”]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择其src属性中包含"abc"子串的每个a节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[attribute]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[target]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择带有target属性所有节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[attribute=value]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[target=_blank]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择target="_blank"的所有节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[attribute~=value]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[title~=china]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择title属性包含单词"china"的所有节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[attribute|=value]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">[lang|=zh]    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#ffd900;">选择lang属性值以"zh"开头的所有节点</span></p> </td> </tr> </tbody> </table> <h3><span style="color:#38d8f0;">2.位置选择器</span></h3> <table border="1" style="width:680px;"> <tbody> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;"><strong>选择器    </strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;"><strong>示例    </strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;"><strong>说明</strong></span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:first-of-type    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:first-of-type    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素是其父级的第一个p元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:last-of-type    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:last-of-type    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素是其父级的最后一个p元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:only-of-type    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:only-of-type    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素是其父级的唯一p元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:only-child    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:only-child  </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;"> 选择每个p元素是其父级的唯一子元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:nth-child(n)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:nth-child(2)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素是其父级的第二个子元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:nth-last-child(n)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:nth-last-child(2)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素的是其父级的倒数第二个子元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:nth-of-type(n)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:nth-of-type(2)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素是其父级的第二个p元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:nth-last-of-type(n)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:nth-last-of-type(2)</span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素的是其父级的倒数第二个p元素</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">:last-child    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">p:last-child  </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#38d8f0;">选择每个p元素是其父级的最后一个子级。</span></p> </td> </tr> </tbody> </table> <h3><span style="color:#a2e043;">3.其他选择器</span></h3> <table border="1" style="width:680px;"> <tbody> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;"><strong>选择器    </strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;"><strong>示例    </strong></span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;"><strong>说明</strong></span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:not(selector)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:not(p)   </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择非p节点的节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:empty    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">p:empty    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择没有子节点的p节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">::selection    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">::selection    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择被用户选取的节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:focus    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">input:focus    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择获得焦点的input节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:root    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:root    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择文档的根节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:enabled    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">input:enabled    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择每个启用的input节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:disabled    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">input:disabled    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择每个禁用的input节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:checked    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">input:checked    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择每个被选中的input节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:link    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">a:link    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择所有未被访问的链接</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:visited    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">a:visited    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择所有已被访问的链接</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:active    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">a:active    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择活动链接</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:hover    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">a:hover    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择鼠标指针位于其上的链接</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:first-letter    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">p:first-letter    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择每个p节点的首字母</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:first-line    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">p:first-line    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择每个p节点的首行</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:first-child    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">p:first-child    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择属于父节点的第一个子节点的每个p节点</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:before    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">p:before    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">在每个p节点的内容之前插入内容</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:after    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">p:after    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">在每个p节点的内容之后插入内容</span></p> </td> </tr> <tr> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">:lang(language)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">p:lang(it)    </span></p> </td> <td style="background-color:#ffffff;border-color:#33cc99;text-align:center;vertical-align:middle;"> <p style="text-align:center;"><span style="color:#a2e043;">选择带有以"it"开头的lang属性值的每个p节点</span></p> </td> </tr> </tbody> </table> <hr> <div> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/34ba9719bf174d88a5f1bb9f7e0304bb.jpg" target="_blank"><img alt="Python基础知识进阶之数据爬虫_第2张图片" src="http://img.e-com-net.com/image/info8/34ba9719bf174d88a5f1bb9f7e0304bb.jpg" width="650" height="343" style="border:1px solid black;"></a></p> <p>​</p> </div> <hr> <p style="text-align:center;"><span style="color:#fe2c24;">有兴趣的小伙伴可以参照爬虫电影排行榜(requests + bs4 )进行学习。</span></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1670781415186325504"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(进阶,python,爬虫,开发语言)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1893723591036432384.htm" title="Python爬虫selenium验证-中文识别点选+图片验证码案例" target="_blank">Python爬虫selenium验证-中文识别点选+图片验证码案例</a> <span class="text-muted">dme.</span> <a class="tag" taget="_blank" href="/search/Python%E7%88%AC%E8%99%AB%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Python爬虫零基础入门</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a> <div>1.获取图片importreimporttimeimportddddocrimportrequestsfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.chrome.serviceimportServicefromselenium.webdriver.support.w</div> </li> <li><a href="/article/1893721827860082688.htm" title="深度强化学习算法在金融交易决策中的优化应用【附数据】" target="_blank">深度强化学习算法在金融交易决策中的优化应用【附数据】</a> <span class="text-muted">算法与数据</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>金融数据分析与建模专家金融科研助手|论文指导|模型构建✨专业领域:金融数据处理与分析量化交易策略研究金融风险建模投资组合优化金融预测模型开发深度学习在金融中的应用擅长工具:Python/R/MATLAB量化分析机器学习模型构建金融时间序列分析蒙特卡洛模拟风险度量模型金融论文指导内容:金融数据挖掘与处理量化策略开发与回测投资组合构建与优化金融风险评估模型期刊论文✅具体问题可以私信或查看文章底部二维码</div> </li> <li><a href="/article/1893721827373543424.htm" title="物联网数据采集平台【物联网毕业论文】" target="_blank">物联网数据采集平台【物联网毕业论文】</a> <span class="text-muted">算法与数据</span> <a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a> <div>物联网技术与数据分析|物联网系统设计|模型构建✨专业领域:物联网系统架构设计智能设备与传感器网络数据采集与处理物联网大数据分析智能家居与工业物联网边缘计算与云计算物联网安全与隐私保护擅长工具:Python/R/Matlab数据分析与建模物联网平台与设备编程数据流与实时监控系统设计机器学习与预测模型应用物联网协议(MQTT,CoAP,HTTP)物联网数据可视化工具✅物联网专业题目与数据:物联网毕业论</div> </li> <li><a href="/article/1893720440577257472.htm" title="利用python实现小提琴图的代码" target="_blank">利用python实现小提琴图的代码</a> <span class="text-muted">python游乐园</span> <a class="tag" taget="_blank" href="/search/%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">可视化</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>importseabornassnsimportmatplotlib.pyplotasplt#加载seaborn内置的鸢尾花数据集iris=sns.load_dataset("iris")#设置绘图风格,可选,这里使用默认风格#sns.set_style("whitegrid")#绘制小提琴图,以'species'为分类依据,绘制'sepal_length'特征的小提琴图#可以根据实际需求更改x和</div> </li> <li><a href="/article/1893719933750145024.htm" title="【数据序列化协议】Protocol Buffers" target="_blank">【数据序列化协议】Protocol Buffers</a> <span class="text-muted">茉菇</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>一、为什么需要序列化?数据跨平台/语言交互:不同编程语言(如Java、Python、Go)的数据结构不兼容,序列化提供统一的数据表示。例如:Java的HashMap和Python的dict需转换为通用格式(如JSON、Protobuf)才能通信。网络传输优化:原始内存中的对象包含指针、元数据等冗余信息,无法直接传输。序列化后数据体积更小,减少带宽占用,提升传输效率。持久化存储:将对象转换为字节流或</div> </li> <li><a href="/article/1893719555260346368.htm" title="pythonmatplotlib绘图小提琴_Matplotlib提琴图" target="_blank">pythonmatplotlib绘图小提琴_Matplotlib提琴图</a> <span class="text-muted">weixin_39797393</span> <div>小提琴图类似于箱形图,除了它们还显示不同值的数据的概率密度。这些图包括数据中位数的标记和表示四分位数范围的框,如标准框图中所示。在该箱图上叠加的是核密度估计。与箱形图一样,小提琴图用于表示跨不同“类别”的可变分布(或样本分布)的比较。小提琴图形比普通图形更具信息性。事实上,虽然箱形图仅显示平均值/中位数和四分位数范围等汇总统计量,但小提琴图显示了数据的完整分布。importmatplotlib.p</div> </li> <li><a href="/article/1893719303216230400.htm" title="pythonmatplotlib绘图小提琴_python 箱线图和小提琴图" target="_blank">pythonmatplotlib绘图小提琴_python 箱线图和小提琴图</a> <span class="text-muted">奥利奥东</span> <div>箱形图(Box-plot)又称为盒须图、盒式图或箱线图是一种用作显示一组数据分散情况资料的统计图,因形状如箱子而得名。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。箱形图绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。箱形图的绘制主要包含六个数据节点,需要先将数据从大到小进行排列,然后分别计算出它的上边缘,上四分位数,中位数,</div> </li> <li><a href="/article/1893715018134908928.htm" title="python绘图之回归拟合图" target="_blank">python绘图之回归拟合图</a> <span class="text-muted">pianmian1</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%9B%9E%E5%BD%92/1.htm">回归</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>回归拟合图在数据分析中具有重要作用,它不仅可以帮助我们理解变量之间的关系,还可以评估模型的拟合效果、进行预测和推断、发现异常值,以及用于模型比较和结果展示。importpandasaspdimportseabornassnsimportmatplotlib.pyplotasplt#创建一个示例数据集#假设我们有一些鱼的重量和高度数据data={'Weight':[100,150,200,250,3</div> </li> <li><a href="/article/1893715018621448192.htm" title="python绘图之密集散点图" target="_blank">python绘图之密集散点图</a> <span class="text-muted">pianmian1</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>密集散点图主要目的是生成一个可视化图表,展示insurance数据集中bmi(身体质量指数)和charges(医疗费用)之间的关系,并通过不同的维度对数据进行分组和区分,以便更清晰地观察数据的分布和特征。importseabornassns#导入Seaborn,用于绘图importmatplotlib.pyplotasplt#导入Matplotlib,用于显示图表importpandasaspd#</div> </li> <li><a href="/article/1893709600935440384.htm" title="C#中级教程(2)——走进 C# 面向对象编程:从基础到进阶的深度探索" target="_blank">C#中级教程(2)——走进 C# 面向对象编程:从基础到进阶的深度探索</a> <span class="text-muted">软件黑马王子</span> <a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、为什么选择面向对象编程在软件开发的演进过程中,随着程序规模和复杂度的不断增加,传统的编程方式逐渐暴露出局限性。面向对象编程应运而生,它就像是一位智慧的组织者,将程序中的功能进行模块化划分。每个模块各司其职,提供特定的功能,而且这些模块相互独立。这种模块化编程极大地提升了代码的可维护性和可扩展性,为开发者带来了诸多便利。例如,在一个电商系统中,用户管理、订单处理、商品展示等功能模块可以各自独立开</div> </li> <li><a href="/article/1893698754536599552.htm" title="Python的几种实现" target="_blank">Python的几种实现</a> <span class="text-muted">weixin_34097242</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/c%2Fc%2B%2B/1.htm">c/c++</a> <div>Python自身作为一门编程语言,它有多种实现。这里的实现指的是符合Python语言规范的Python解释程序以及标准库等。这些实现虽然实现的是同一种语言,但是彼此之间,特别是与CPython之间还是有些差别的。下面分别列出几个主要的实现。1.CPython:这是Python的官方版本,使用C语言实现,使用最为广泛,新的语言特性一般也最先出现在这里。CPython实现会将源文件(py文件)转换成字</div> </li> <li><a href="/article/1893695600650678272.htm" title="Python--函数进阶(上)" target="_blank">Python--函数进阶(上)</a> <span class="text-muted">索然无味io</span> <a class="tag" taget="_blank" href="/search/Python%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91/1.htm">Python安全开发</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>1.参数深入理解1.1参数传递的内存机制Python中参数传递的是内存地址(引用传递),而非值拷贝。这意味着:可变对象(列表、字典)在函数内修改会影响外部变量。不可变对象(数字、字符串)在函数内重新赋值会创建新对象。defmodify_list(lst):lst.append(4)#修改原列表my_list=[1,2,3]modify_list(my_list)print(my_list)#输出:</div> </li> <li><a href="/article/1893695096927350784.htm" title="基于DeepSeek开发实战:抖音无水印视频下载爬虫" target="_blank">基于DeepSeek开发实战:抖音无水印视频下载爬虫</a> <span class="text-muted">Developer-YC</span> <a class="tag" taget="_blank" href="/search/DeekSeek/1.htm">DeekSeek</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E8%A7%A3%E8%AF%BB%E4%B8%8E%E5%AE%9E%E6%88%98%E6%95%99%E5%AD%A6/1.htm">大模型解读与实战教学</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91/1.htm">视频</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>引言嘿,小伙伴们!今天我要跟大家吐槽一下,那些让人抓狂的抖音短视频提取瞬间!你是不是也遇到过,明明看到一个超赞的舞蹈视频,想学着跳一跳,或者,有时候看到一个搞笑段子,想分享给朋友却发现,哎?点开分享发现视频无法下载或作者关闭了下载功能?简直急死人了!真是让人无语啊!这些抖音短视频的提取困难,简直就是我们追求快乐和分享乐趣路上的绊脚石!一、需求分析与技术选型1.1核心需求通过抖音分享链接实现:自动解</div> </li> <li><a href="/article/1893690685467455488.htm" title="2025 Swift 最新面试题及答案" target="_blank">2025 Swift 最新面试题及答案</a> <span class="text-muted">九变形战士</span> <a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">移动开发</a><a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a> <div>2024Swift最新面试题及答案基础部分Swift访问控制Swift`Any`、`AnyObject`和`Generics`区别Swift`final`关键字⽤过没主要⽤来⼲嘛Swift的`static`和`class`区别Swift的`extension`⽤过没,都能⼲嘛Swift中的Optional是什么?如何安全解包?Swift有什么⽅案能监听属性值的变化,不使用ObjC的KVO进阶部分说</div> </li> <li><a href="/article/1893688166704017408.htm" title="python-leetcode-二叉树的中序遍历" target="_blank">python-leetcode-二叉树的中序遍历</a> <span class="text-muted">Joyner2018</span> <a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>94.二叉树的中序遍历-力扣(LeetCode)方法1:递归实现#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:definorderTraversa</div> </li> <li><a href="/article/1893686023636971520.htm" title="python 如何生成requirements.txt" target="_blank">python 如何生成requirements.txt</a> <span class="text-muted">「已注销」</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在Python项目中,requirements.txt文件通常用于列出项目依赖的库及其版本号。这样可以方便地在其他环境中安装相同的依赖。以下是生成requirements.txt文件的几种方法:方法1:使用pipfreeze如果你已经在虚拟环境或全局环境中安装了所有需要的依赖包,可以直接使用以下命令生成requirements.txt:bash代码解读复制代码pipfreeze>requireme</div> </li> <li><a href="/article/1893684259697258496.htm" title="Python 爬虫实战:深入酷狗音乐,抓取热门歌手歌曲播放量数据" target="_blank">Python 爬虫实战:深入酷狗音乐,抓取热门歌手歌曲播放量数据</a> <span class="text-muted">西攻城狮北</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%88%98%E6%A1%88%E4%BE%8B/1.htm">实战案例</a> <div>目录引言一、准备工作1.1技术选型1.2环境配置二、爬取热门歌手歌曲播放量数据2.1获取排行榜页面2.2解析HTML内容2.3数据存储三、数据分析与可视化3.1数据清洗3.2数据分析3.3数据可视化四、总结与展望引言在数字音乐时代,音乐平台的排行榜和歌曲播放量数据对于音乐爱好者、歌手以及音乐产业从业者来说具有重要的参考价值。通过分析这些数据,可以了解当前的音乐趋势、歌手的受欢迎程度以及用户的音乐偏</div> </li> <li><a href="/article/1893679472595496960.htm" title="Deepseek在【python】三帧差法实现运动目标检测" target="_blank">Deepseek在【python】三帧差法实现运动目标检测</a> <span class="text-muted">百态老人</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E8%B7%9F%E8%B8%AA/1.htm">目标跟踪</a> <div>deepseek在【python】三帧差法实现运动目标检测一、三帧差法原理三帧差法是一种改进的帧差法,通过比较连续的三帧图像来检测运动目标。具体来说,它首先计算前两帧图像之间的差值,再计算后两帧图像之间的差值,最后将这两个差值图像进行“与”运算,以确定运动目标的变化部分。这种方法能够更好地消除“双影”现象,提高目标检测的准确性。二、实现步骤读取视频帧:使用OpenCV库读取视频序列中的连续三帧图像</div> </li> <li><a href="/article/1893678841872838656.htm" title="比Python、Java更快的 Go 语言,能否称霸江湖?" target="_blank">比Python、Java更快的 Go 语言,能否称霸江湖?</a> <span class="text-muted">weixin_33686714</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ruby/1.htm">ruby</a> <div>文章来源:jb51.net有一种语言堪称比语言排行榜前五热门选手的Python、Java更快,它就是GO语言。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及MacOSX平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE选为“TIOBE2016年最佳语言”。目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。在Go语言</div> </li> <li><a href="/article/1893674054825603072.htm" title="C/C++ 指针对齐样式:对齐方式" target="_blank">C/C++ 指针对齐样式:对齐方式</a> <span class="text-muted">谏君之</span> <a class="tag" taget="_blank" href="/search/C%2F%23C%2B%2B/1.htm">C/#C++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>几乎所有的编码风格问题都是主观意见和个人品味的问题。制表符v.空格,Allmanv.K&R,运算符填充v.无;无论你站在哪个位置,你几乎可以肯定你选择的风格都有一系列的理由,你可以保证其他阵营也是如此。一些语言,如Python,甚至定义了大量的标准样式约定(PEP-8)。C和C++没有这样的官方统一标准。因此,这些语言中存在无数的样式约定排列。看看AStyle的文档有多大!没关系!每个开发人员、项</div> </li> <li><a href="/article/1893673170813120512.htm" title="Python部署工控安全风险评估系统" target="_blank">Python部署工控安全风险评估系统</a> <span class="text-muted">mosquito_lover1</span> <a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>1.工控安全基础理论1.1风险评估概念风险定义:风险=事件发生的可能性×事件的影响影响分析(ImpactAnalysis):评估特定事件(如设备故障、网络攻击)对工控系统的关键资产(设备、数据、流程)的破坏程度,通常从以下维度分析:机密性(Confidentiality):数据是否被泄露。完整性(Integrity):数据或设备是否被篡改。可用性(Availability):系统是否能够正常运行。</div> </li> <li><a href="/article/1893666735983226880.htm" title="C#初级教程(5)——解锁 C# 变量的更多奥秘:从基础到进阶的深度指南" target="_blank">C#初级教程(5)——解锁 C# 变量的更多奥秘:从基础到进阶的深度指南</a> <span class="text-muted">软件黑马王子</span> <a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a> <div>一、变量类型转换:隐式与显式的门道(一)隐式转换:编译器的“贴心小助手”隐式转换是编译器自动进行的类型转换,无需开发者手动干预。这种转换通常发生在将取值范围小的数据类型赋值给取值范围大的数据类型时,就像把小盒子里的东西放进大盒子,完全没问题。例如:shortnum1=100;intnum2=num1;在这个例子中,short类型的num1可以直接赋值给int类型的num2,因为int类型的取值范围</div> </li> <li><a href="/article/1893663208502259712.htm" title="【python】三帧差法实现运动目标检测" target="_blank">【python】三帧差法实现运动目标检测</a> <span class="text-muted">Jackilina_Stone</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E5%8A%A8%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">运动目标检测</a><a class="tag" taget="_blank" href="/search/OD/1.htm">OD</a> <div>三帧差法是一种常用的运动目标检测方法,它通过比较连续三帧图像之间的差异来检测运动物体。这种方法尤其适用于背景变化较小的场景。目录1方案2实践①代码②效果图1方案具体步骤如下:①读取视频流:使用cv2.VideoCapture()读取视频文件。②灰度化:将彩色图像转换为灰度图,简化后续计算。③帧间差分:计算连续三帧之间的差分,absdiff函数计算两个灰度图像的绝对差值。然后,将两帧差相加。④阈值处</div> </li> <li><a href="/article/1893647445284417536.htm" title="argparse模块使用说明" target="_blank">argparse模块使用说明</a> <span class="text-muted">浩瀚之水_csdn</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Python%E5%AD%A6%E4%B9%A0/1.htm">Python学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>argparse是Python标准库中的一个模块,它提供了一个简单的方式来为Python程序添加命令行参数。以下是argparse的详细说明及使用指南:导入模块首先,你需要在你的Python脚本中导入argparse模块:importargparse创建解析器接下来,你需要创建一个ArgumentParser对象。这个对象将包含你的程序所接受的命令行参数的信息:parser=argparse.Ar</div> </li> <li><a href="/article/1893645514667257856.htm" title="Python 潮流周刊#90:uv 一周岁了,优缺点分析(摘要)" target="_blank">Python 潮流周刊#90:uv 一周岁了,优缺点分析(摘要)</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目以下是本期摘要:文章&教程①Python3.14的尾调用解释器(及其它更新)②UV一周年:优点、缺点以及是否迁移?③创建Django的MongoDB数据库后端④Py</div> </li> <li><a href="/article/1893644420964741120.htm" title="大数据安全项目" target="_blank">大数据安全项目</a> <span class="text-muted">是小酒</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1.项目详情        用python写一个大数据安全项目(使用tk,页面布局使用盒子模型,页面中各个按钮,主题要美观,按扭间的距离不要太进),需要连接数据库连接名是root(数据库名为bigdata_security,数据库密码是123456。查询数据库中的student表(包括id,name,sex,school,height,weight这些字段))。包括管理员和学生两个功能。2.代码详</div> </li> <li><a href="/article/1893644294640693248.htm" title="【Python】Python与C的区别" target="_blank">【Python】Python与C的区别</a> <span class="text-muted">Reese_Cool</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>文章目录语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数语句结束符C语言C语言中每条语句必须以分号;结束。例如,inta=10;、printf("Hello,World!");。分号是语句的一部分,用于告诉编译器一条语句在哪里结束。如果忘记添加分号,编译器会报错,提示语法错误。Python语言Python语句一般不需要特定的结束符</div> </li> <li><a href="/article/1893633201516113920.htm" title="Ubuntu24.04安装不同版本的pip" target="_blank">Ubuntu24.04安装不同版本的pip</a> <span class="text-muted">Zucker N</span> <a class="tag" taget="_blank" href="/search/LINUX/1.htm">LINUX</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录1.安装pip2.为不同的Python版本安装`pip3.安装python库1.安装pip一般情况下,Ubuntu系统默认提供Python3,但可能没有安装`pip`。可以通过以下命令安装`pip`sudoaptupdatesudoaptinstallpython3-pip安装完成后,可以通过以下命令确认`pip`是否安装成功:pip3--version输出版本号就说明安装成功2.为不同的Py</div> </li> <li><a href="/article/1893629672902684672.htm" title="【华为OD技术面试手撕真题】98、同构字符串 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(0ms)" target="_blank">【华为OD技术面试手撕真题】98、同构字符串 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(0ms)</a> <span class="text-muted">KJ.JK</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAOD%E6%8A%80%E6%9C%AF%E9%9D%A2%E8%AF%95%E6%89%8B%E6%92%95%E7%9C%9F%E9%A2%98/1.htm">华为OD技术面试手撕真题</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod%E6%9C%BA%E8%AF%95%E7%9C%9F%E9%A2%98/1.htm">华为od机试真题</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod%E6%9C%BA%E8%AF%95E%E5%8D%B7/1.htm">华为od机试E卷</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E6%9E%84%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">同构字符串</a> <div>文章目录一、题目题目描述样例1二、代码参考C语言思路C语言代码C++语言思路C++代码Java语言思路Java代码Python语言思路Python代码JS语言思路JS代码作者:KJ.JK个人博客首页:KJ.JK专栏介绍:本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C&C++&Java&Python&JS),思路分析都非常详细,争取实现最低的时间复杂度和高通过率,每</div> </li> <li><a href="/article/1893627530276040704.htm" title="【A/B测试】深度解析:从理论到实践Python实现详解(含源码)" target="_blank">【A/B测试】深度解析:从理论到实践Python实现详解(含源码)</a> <span class="text-muted">絆人心</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>目录前言一、什么是A/B测试?A/B测试的常见应用场景二、A/B测试的基本流程三、假设检验:零假设与备择假设Python代码示例:A/B测试的实践四、A/B测试中的统计学方法五、总结附录:完整代码前言A/B测试(也称分流测试)在数据分析和产品优化中扮演重要角色。无论是在网站优化、营销活动还是产品改进中,A/B测试都帮助通过数据驱动决策、测试和验证论文提出了实际操作的基本概念,详细讲解了如何实施A/</div> </li> <li><a href="/article/52.htm" title="解读Servlet原理篇二---GenericServlet与HttpServlet" target="_blank">解读Servlet原理篇二---GenericServlet与HttpServlet</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/HttpServlet/1.htm">HttpServlet</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%90%86/1.htm">源理</a><a class="tag" taget="_blank" href="/search/GenericService/1.htm">GenericService</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a> <div>在上一篇《解读Servlet原理篇一》中提到,要实现javax.servlet.Servlet接口(即写自己的Servlet应用),你可以写一个继承自javax.servlet.GenericServletr的generic Servlet ,也可以写一个继承自java.servlet.http.HttpServlet的HTTP Servlet(这就是为什么我们自定义的Servlet通常是exte</div> </li> <li><a href="/article/179.htm" title="MySQL性能优化" target="_blank">MySQL性能优化</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>        性能优化是通过某些有效的方法来提高MySQL的运行速度,减少占用的磁盘空间。性能优化包含很多方面,例如优化查询速度,优化更新速度和优化MySQL服务器等。本文介绍方法的主要有:         a.优化查询         b.优化数据库结构   </div> </li> <li><a href="/article/306.htm" title="ThreadPool定时重试" target="_blank">ThreadPool定时重试</a> <span class="text-muted">dai_lm</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ThreadPool/1.htm">ThreadPool</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/timertask/1.htm">timertask</a> <div>项目需要当某事件触发时,执行http请求任务,失败时需要有重试机制,并根据失败次数的增加,重试间隔也相应增加,任务可能并发。 由于是耗时任务,首先考虑的就是用线程来实现,并且为了节约资源,因而选择线程池。 为了解决不定间隔的重试,选择Timer和TimerTask来完成 package threadpool; public class ThreadPoolTest { </div> </li> <li><a href="/article/433.htm" title="Oracle 查看数据库的连接情况" target="_blank">Oracle 查看数据库的连接情况</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/oracle+%E8%BF%9E%E6%8E%A5/1.htm">oracle 连接</a> <div>首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表。 select * from dict where table_name like '%SESSION%'; 就可以查出一些表,然后根据这些表就可以获得会话信息 select sid,serial#,status,username,schemaname,osuser,terminal,ma</div> </li> <li><a href="/article/560.htm" title="类的继承" target="_blank">类的继承</a> <span class="text-muted">朱辉辉33</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>类的继承可以提高代码的重用行,减少冗余代码;还能提高代码的扩展性。Java继承的关键字是extends 格式:public class 类名(子类)extends 类名(父类){ } 子类可以继承到父类所有的属性和普通方法,但不能继承构造方法。且子类可以直接使用父类的public和 protected属性,但要使用private属性仍需通过调用。 子类的方法可以重写,但必须和父类的返回值类</div> </li> <li><a href="/article/687.htm" title="android 悬浮窗特效" target="_blank">android 悬浮窗特效</a> <span class="text-muted">肆无忌惮_</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:   一开始考虑用自定义View来做。后来发现开线程让其移动很卡,ListView+动画也没法精确定位到目标点。   后来想利用Dialog的dismiss动画来完成。   自定义一个Dialog后,在styl</div> </li> <li><a href="/article/814.htm" title="hadoop伪分布式搭建" target="_blank">hadoop伪分布式搭建</a> <span class="text-muted">林鹤霄</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>要修改4个文件    1: vim hadoop-env.sh  第九行    2: vim core-site.xml            <configuration>     &n</div> </li> <li><a href="/article/941.htm" title="gdb调试命令" target="_blank">gdb调试命令</a> <span class="text-muted">aigo</span> <a class="tag" taget="_blank" href="/search/gdb/1.htm">gdb</a> <div>原文:http://blog.csdn.net/hanchaoman/article/details/5517362   一、GDB常用命令简介   r run 运行.程序还没有运行前使用 c             cuntinue </div> </li> <li><a href="/article/1068.htm" title="Socket编程的HelloWorld实例" target="_blank">Socket编程的HelloWorld实例</a> <span class="text-muted">alleni123</span> <a class="tag" taget="_blank" href="/search/socket/1.htm">socket</a> <div>public class Client { public static void main(String[] args) { Client c=new Client(); c.receiveMessage(); } public void receiveMessage(){ Socket s=null; BufferedRea</div> </li> <li><a href="/article/1195.htm" title="线程同步和异步" target="_blank">线程同步和异步</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5/1.htm">线程同步</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%AD%A5/1.htm">异步</a> <div>多线程和同步 : 如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法   多线程和异步:多线程可以做不同的事情,涉及到线程通知     &</div> </li> <li><a href="/article/1322.htm" title="JSP中文乱码分析" target="_blank">JSP中文乱码分析</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a> <div>        在JSP的开发过程中,经常出现中文乱码的问题。         首先了解一下Java中文问题的由来:         Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,</div> </li> <li><a href="/article/1449.htm" title="js实现页面跳转重定向的几种方式" target="_blank">js实现页面跳转重定向的几种方式</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E5%AE%9A%E5%90%91/1.htm">重定向</a> <div>        js实现页面跳转重定向有如下几种方式: 一.window.location.href <script language="javascript"type="text/javascript"> window.location.href="http://www.baidu.c</div> </li> <li><a href="/article/1576.htm" title="【Struts2三】Struts2 Action转发类型" target="_blank">【Struts2三】Struts2 Action转发类型</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/struts2/1.htm">struts2</a> <div> 在【Struts2一】 Struts Hello World http://bit1129.iteye.com/blog/2109365中配置了一个简单的Action,配置如下   <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configurat</div> </li> <li><a href="/article/1703.htm" title="【HBase十一】Java API操作HBase" target="_blank">【HBase十一】Java API操作HBase</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a> <div>Admin类的主要方法注释:   1. 创建表 /** * Creates a new table. Synchronous operation. * * @param desc table descriptor for table * @throws IllegalArgumentException if the table name is res</div> </li> <li><a href="/article/1830.htm" title="nginx gzip" target="_blank">nginx gzip</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+gzip/1.htm">nginx gzip</a> <div>Nginx GZip 压缩 Nginx GZip 模块文档详见:http://wiki.nginx.org/HttpGzipModule 常用配置片段如下: gzip on; gzip_comp_level 2; # 压缩比例,比例越大,压缩时间越长。默认是1 gzip_types text/css text/javascript; # 哪些文件可以被压缩 gzip_disable &q</div> </li> <li><a href="/article/1957.htm" title="java-7.微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1 , h2 ,判断这俩个链表是否相交" target="_blank">java-7.微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1 , h2 ,判断这俩个链表是否相交</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class LinkListTest { /** * we deal with two main missions: * * A. * 1.we create two joined-List(both have no loop) * 2.whether list1 and list2 join * 3.print the join</div> </li> <li><a href="/article/2084.htm" title="Spring源码学习-JdbcTemplate batchUpdate批量操作" target="_blank">Spring源码学习-JdbcTemplate batchUpdate批量操作</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造和封装 JDBC的batch操作: String sql = "INSERT INTO CUSTOMER " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)"; </div> </li> <li><a href="/article/2211.htm" title="[JWFD开源工作流]大规模拓扑矩阵存储结构最新进展" target="_blank">[JWFD开源工作流]大规模拓扑矩阵存储结构最新进展</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a> <div>    生成和创建类已经完成,构造一个100万个元素的矩阵模型,存储空间只有11M大,请大家参考我在博客园上面的文档"构造下一代工作流存储结构的尝试",更加相信的设计和代码将陆续推出.........     竞争对手的能力也很强.......,我相信..你们一定能够先于我们推出大规模拓扑扫描和分析系统的....</div> </li> <li><a href="/article/2338.htm" title="base64编码和url编码" target="_blank">base64编码和url编码</a> <span class="text-muted">cuityang</span> <a class="tag" taget="_blank" href="/search/base64/1.htm">base64</a><a class="tag" taget="_blank" href="/search/url/1.htm">url</a> <div>import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringWriter; import java.io.UnsupportedEncodingException; </div> </li> <li><a href="/article/2465.htm" title="web应用集群Session保持" target="_blank">web应用集群Session保持</a> <span class="text-muted">dalan_123</span> <a class="tag" taget="_blank" href="/search/session/1.htm">session</a> <div>关于使用 memcached 或redis 存储 session ,以及使用 terracotta 服务器共享。建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session,还可以做其他用途,一举几得啊。1、使用 filter 方法存储这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简</div> </li> <li><a href="/article/2719.htm" title="Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']" target="_blank">Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>    public function getMinLimit () {        $sql = "...";        $result = yii::app()->db->createCo</div> </li> <li><a href="/article/2846.htm" title="solr StatsComponent(聚合统计)" target="_blank">solr StatsComponent(聚合统计)</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/solr%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2/1.htm">solr聚合查询</a><a class="tag" taget="_blank" href="/search/solr+stats/1.htm">solr stats</a> <div>StatsComponent 转载请出自出处:http://eksliang.iteye.com/blog/2169134 http://eksliang.iteye.com/ 一、概述        Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min、max、avg、count、sum的功能   二、参数</div> </li> <li><a href="/article/2973.htm" title="百度一道面试题" target="_blank">百度一道面试题</a> <span class="text-muted">greemranqq</span> <a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a><a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6%E9%9D%A2%E8%AF%95/1.htm">百度面试</a><a class="tag" taget="_blank" href="/search/%E5%AF%BB%E6%89%BE%E5%A5%87%E6%95%B0%E7%AE%97%E6%B3%95/1.htm">寻找奇数算法</a><a class="tag" taget="_blank" href="/search/bitmap+%E7%AE%97%E6%B3%95/1.htm">bitmap 算法</a> <div>那天看朋友提了一个百度面试的题目:怎么找出{1,1,2,3,3,4,4,4,5,5,5,5}  找出出现次数为奇数的数字.   我这里复制的是原话,当然顺序是不一定的,很多拿到题目第一反应就是用map,当然可以解决,但是效率不高。   还有人觉得应该用算法xxx,我是没想到用啥算法好...!   还有觉得应该先排序...   还有觉</div> </li> <li><a href="/article/3100.htm" title="Spring之在开发中使用SpringJDBC" target="_blank">Spring之在开发中使用SpringJDBC</a> <span class="text-muted">ihuning</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>  在实际开发中使用SpringJDBC有两种方式:   1. 在Dao中添加属性JdbcTemplate并用Spring注入;     JdbcTemplate类被设计成为线程安全的,所以可以在IOC 容器中声明它的单个实例,并将这个实例注入到所有的 DAO 实例中。JdbcTemplate也利用了Java 1.5 的特定(自动装箱,泛型,可变长度</div> </li> <li><a href="/article/3227.htm" title="JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节" target="_blank">JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节</a> <span class="text-muted">justjavac</span> <a class="tag" taget="_blank" href="/search/json/1.htm">json</a> <div>2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿。事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢。在沟通单一 Rails 服务器库—— ActiveModel::Serializers 和单一 JavaScript 客户端库——&</div> </li> <li><a href="/article/3354.htm" title="网站项目建设流程概述" target="_blank">网站项目建设流程概述</a> <span class="text-muted">macroli</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a> <div>一.概念 网站项目管理就是根据特定的规范、在预算范围内、按时完成的网站开发任务。 二.需求分析 项目立项   我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论够,初步达成制作协议,这时就需要将项目立项。较好的做法是成立一个专门的项目小组,小组成员包括:项目经理,网页设计,程序员,测试员,编辑/文档等必须人员。项目实行项目经理制。 客户的需求说明书   第一步是需</div> </li> <li><a href="/article/3481.htm" title="AngularJs 三目运算 表达式判断" target="_blank">AngularJs 三目运算 表达式判断</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E4%BC%97%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">众观千象</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a> <div>事件回顾:由于需要修改同一个模板,里面包含2个不同的内容,第一个里面使用的时间差和第二个里面名称不一样,其他过滤器,内容都大同小异。希望杜绝If这样比较傻的来判断if-show or not,继续追究其源码。 var b = "{{", a = "}}"; this.startSymbol = function(a) { </div> </li> <li><a href="/article/3608.htm" title="Spark算子:统计RDD分区中的元素及数量" target="_blank">Spark算子:统计RDD分区中的元素及数量</a> <span class="text-muted">superlxw1234</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/spark%E7%AE%97%E5%AD%90/1.htm">spark算子</a><a class="tag" taget="_blank" href="/search/Spark+RDD%E5%88%86%E5%8C%BA%E5%85%83%E7%B4%A0/1.htm">Spark RDD分区元素</a> <div>关键字:Spark算子、Spark RDD分区、Spark RDD分区元素数量     Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Block数。   可以利用RDD的mapPartitionsWithInd</div> </li> <li><a href="/article/3735.htm" title="Spring 3.2.x将于2016年12月31日停止支持" target="_blank">Spring 3.2.x将于2016年12月31日停止支持</a> <span class="text-muted">wiselyman</span> <a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a> <div>              Spring 团队公布在2016年12月31日停止对Spring Framework 3.2.x(包含tomcat 6.x)的支持。在此之前spring团队将持续发布3.2.x的维护版本。          请大家及时准备及时升级到Spring </div> </li> <li><a href="/article/3862.htm" title="fis纯前端解决方案fis-pure" target="_blank">fis纯前端解决方案fis-pure</a> <span class="text-muted">zccst</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>作者:zccst FIS通过插件扩展可以完美的支持模块化的前端开发方案,我们通过FIS的二次封装能力,封装了一个功能完备的纯前端模块化方案pure。 1,fis-pure的安装 $ fis install -g fis-pure $ pure -v 0.1.4 2,下载demo到本地 git clone https://github.com/hefangshi/f</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>