Python之BeautifulSoup库详解

一、简介

BeautifulSoup是一个灵活方便的网页解析库,处理高效,能够自动的将输入文档转换为Unicode编码,输出文档转换为utf-8编码,且支持多种解析器。其最主要的功能是从网页抓取数据。

二、解析器

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, ‘html.parser’) python内置的标准库,执行速度适中 Python3.2.2之前的版本容错能力差
lxml HTML解析器 BeautifulSoup(markup, ‘lxml’) 速度快、文档容错能力强 需要安装C语言库
lxml XML解析器 BeautifulSoup(markup ‘xml’) 速度快,唯一支持XML的解析器 需要安装C语言库
html5lib BeautifulSoup(markup, ‘html5lib’) 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 速度慢,不依赖外部拓展

三、基本使用步骤

3.1 获取网页源码也可以通过字符串自己构建一个网页的源码

# 给请求指定一个请求头来模拟chrome浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'}
# 爬图地址
addr = 'https://sc.chinaz.com/tupian/'

def getHtmlSource():
	# 使用请求头来模拟chrome浏览器访问网页,获取页面响应结果
    res = requests.get(addr, headers=headers).text
    print(res)

requests.get().text返回的是Unicode型的数据,requests.get().content返回的是bytes型的数据。如果只是使用.text来获取页面源码的话,获取的源码中中文会乱码。可以使用一下方法解决中文乱码:
(1)手动指定页面编码

    res = requests.get(addr, headers=headers)
    res.encoding = 'UTF-8'
    html_doc = res.text

(2)使用.content方法

    html_doc = str(requests.get(addr, headers=headers).content, 'UTF-8')

3.2 使用解析器解析页面响应结果

# 使用自带的html.parser解析页面响应结果
soup = BeautifulSoup(html_doc, 'html.parser')
# 使用lxml HTML解析器解析页面响应结果
soup = BeautifulSoup(html_doc, 'lxml')
# 使用lxml XML解析器解析页面响应结果
soup = BeautifulSoup(html_doc, 'xml')
# 使用html5lib解析页面响应结果
soup = BeautifulSoup(html_doc, 'html5lib')

四、四大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

4.1 Tag

Tag 通俗点讲就是 HTML 中的一个个标签,例如:titleheadap等等 HTML 标签加上里面包括的内容就是 Tag。但是注意,它查找的是在所有内容中的第一个符合要求的标签。

# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')
# 通过Tag对象获取title标签信息
print(soup.title)
## 图片、图片下载、高清图片材

# 通过Tag对象获取a标签信息
print(soup.a)
## 

Tag 它有两个重要的属性,是 name 和 attrs。
(1) name: 输出标签的标签类型名:

print(soup.title.name)
# title
print(soup.p.name)
# p

(2) attrs: 以字典的形式获取标签的属性:

 # 获取标签的所有属性
 soup.p.attrs
 # 获取标签的某个属性
 soup.p.attrs['js-do']
 soup.p.get('js-do')	
 # 修改标签的属性
 soup.p.attrs['js-do'] = 'newContenct'
 # 删除标签的属性
 del soup.p.attrs['js-do']

4.2 NavigableString

注意作用是为了获取标签内部的文字。

# 获取标签内部文字
print(soup.title.string)

4.3 BeautifulSoup

BeautifulSoup 对象表示的是一个文档的内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们也可以获取它的属性及名称。

# 获取BeautifulSoup对象名称
print(soup.name)
# 获取BeautifulSoup对象属性
print(soup.attr)

4.4 Comment

Comment 对象是一个特殊类型的 NavigableString 对象,如果标签内部的内容是注释,其输出的内容不包括注释符号。

print(soup.a)
## 
print(soup.a.string)
## zhushi
print(type(soup.a.string))
## 

五、搜索文档树

find(name, attrs, recursive, string, **kwargs):获取匹配的第一个标签;
find_all(name, attrs, recursive, string, limit, **kwargs) :返回结果是值包含一个元素的列表;

  • name:是根据标签的名称进行匹配,name的值相当于过滤条件,可以是一个具体的标签名,多个标签名组成的列表,或者是一个正在表达式,甚至是函数方法等等。
  • attrs:是根据标签的属性进行匹配。
  • recursive:是否递归搜索,默认为True,会搜索当前tag的所有子孙节点,设置为False,则只搜索儿子节点。
  • string:是根据标签的文本内容去匹配。
  • limit:设置查询的结果数量。
  • kwargs:也是根据标签的属性进行匹配,与attrs的区别在于写法不一样,且属性的key不能是保留字,也不能与其他参数名相同。

5.1 使用name进行匹配

# 查找所有的标签
soup.find_all(name="a") # 可以简写成 soup.find_all("a")

# 查找所有的标签或者<link>标签</span>
soup.find_all<span class="token punctuation">(</span>name<span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">'title'</span>, <span class="token string">'link'</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment"># 可以简写成 soup.find_all(['title', 'link']) </span>

<span class="token comment"># 查找所有以a开头的标签</span>
soup.find_all<span class="token punctuation">(</span>name<span class="token operator">=</span>re.compile<span class="token punctuation">(</span><span class="token string">"^a"</span><span class="token punctuation">))</span> <span class="token comment"># 可以简写成 soup.find_all(re.compile("^a")) </span>

<span class="token comment"># 查找有class属性并且没有id属性的节点</span>
soup.find_all<span class="token punctuation">(</span>hasClassNoId<span class="token punctuation">)</span>
def hasClassNoId<span class="token punctuation">(</span>tag<span class="token punctuation">)</span>:
    <span class="token builtin class-name">return</span> tag.has_attr<span class="token punctuation">(</span><span class="token string">'class'</span><span class="token punctuation">)</span> and not tag.has_attr<span class="token punctuation">(</span><span class="token string">'id'</span><span class="token punctuation">)</span>
    
<span class="token comment"># 查找body里面所有标签</span>
soup.find<span class="token punctuation">(</span><span class="token string">'body'</span><span class="token punctuation">)</span>.find_all<span class="token punctuation">(</span>True<span class="token punctuation">)</span>
</code></pre> 
  <h4>5.2 使用attrs进行匹配</h4> 
  <pre><code class="prism language-bash"><span class="token comment"># 查找所有name属性值为tb_name的标签</span>
soup.find_all<span class="token punctuation">(</span>attrs<span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">"name"</span><span class="token builtin class-name">:</span> <span class="token string">"tb_name"</span><span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token comment"># 查找所有id属性值为id_attr1或者id_attr2的标签</span>
soup.find_all<span class="token punctuation">(</span>attrs<span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">'id'</span><span class="token builtin class-name">:</span> <span class="token punctuation">[</span><span class="token string">'id_attr1'</span>, <span class="token string">'id_attr2'</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token comment"># 查找id属性值中含有id_的所有标签</span>
soup.find_all<span class="token punctuation">(</span>attrs<span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">'id'</span>:re.compiles<span class="token punctuation">(</span><span class="token string">'id_'</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token comment"># 查找含有id属性的所有tag</span>
soup.find_all<span class="token punctuation">(</span>attrs<span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">'id'</span>:True<span class="token punctuation">}</span><span class="token punctuation">)</span>

<span class="token comment"># 查找href属性值中以.html结尾的所有标签</span>
soup.find_all<span class="token punctuation">(</span>attrs<span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">'href'</span><span class="token builtin class-name">:</span> search_html<span class="token punctuation">}</span><span class="token punctuation">)</span>
def search_html<span class="token punctuation">(</span>attr<span class="token punctuation">)</span>:
    <span class="token builtin class-name">return</span> attr and attr.lower<span class="token punctuation">(</span><span class="token punctuation">)</span>.endswith<span class="token punctuation">(</span><span class="token string">'.html'</span><span class="token punctuation">)</span>
</code></pre> 
  <h4>5.3 使用kwargs进行匹配</h4> 
  <p><code>也是通过标签的属性进行匹配,需要特别注意的是name属性以及class属性,name属于与find_all方法的第一个参数名相同,这里使用name='属性值'进行查询的话,如果是一个参数会与标签名进行匹配,如果是多个参数,则方法会报错;而class是python的保留字,使用class属性进行匹配的时候需要写成class_='属性值'的方式</code></p> 
  <pre><code class="prism language-bash"><span class="token comment"># 查找<div>中name属性值是backpage的所有标签</span>
soup.find_all<span class="token punctuation">(</span><span class="token string">'div'</span>, <span class="token assign-left variable">name</span><span class="token operator">=</span><span class="token string">'backpage'</span><span class="token punctuation">)</span>  <span class="token comment">## 会报错</span>

<span class="token comment"># 查找class属性值是backpage的所有标签</span>
soup.find_all<span class="token punctuation">(</span>class_<span class="token operator">=</span><span class="token string">'backpage'</span><span class="token punctuation">)</span>

<span class="token comment"># 查找所有id属性值为id_attr1或者id_attr2的标签</span>
soup.find_all<span class="token punctuation">(</span>id<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">'id_attr1'</span>, <span class="token string">'id_attr2'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

<span class="token comment"># 查找href的属性值包含.html的所有的标签</span>
soup.find_all<span class="token punctuation">(</span>href<span class="token operator">=</span>re.compile<span class="token punctuation">(</span><span class="token string">'.html'</span><span class="token punctuation">))</span>

<span class="token comment"># 查找含有id属性的所有tag</span>
soup.find_all<span class="token punctuation">(</span>id<span class="token operator">=</span>True<span class="token punctuation">)</span>

<span class="token comment"># 查找href属性值中以.html结尾的所有标签</span>
soup.find_all<span class="token punctuation">(</span>href<span class="token operator">=</span> search_html<span class="token punctuation">)</span>
def search_html<span class="token punctuation">(</span>attr<span class="token punctuation">)</span>:
    <span class="token builtin class-name">return</span> attr and attr.lower<span class="token punctuation">(</span><span class="token punctuation">)</span>.endswith<span class="token punctuation">(</span><span class="token string">'.html'</span><span class="token punctuation">)</span>
</code></pre> 
  <h4>5.4 使用string进行匹配</h4> 
  <p><code>需要注意的是这里返回标签的值,如果需要获取到对应的标签,可以使用previous_element属性来获得</code></p> 
  <pre><code class="prism language-bash"><span class="token comment"># 查找标签的value是'上一页'的所有value值</span>
soup.find_all<span class="token punctuation">(</span>string<span class="token operator">=</span><span class="token string">'上一页'</span><span class="token punctuation">)</span>

<span class="token comment"># 查找标签的value是'上一页'的所有标签</span>
<span class="token punctuation">[</span>value.previous_element <span class="token keyword">for</span> <span class="token for-or-select variable">value</span> <span class="token keyword">in</span> soup.find_all<span class="token punctuation">(</span>string<span class="token operator">=</span><span class="token string">'上一页'</span><span class="token punctuation">)</span><span class="token punctuation">]</span>

<span class="token comment"># 查找value是'上一页'或者'下一页'的所有value值</span>
soup.find_all<span class="token punctuation">(</span>string<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">'上一页'</span>,<span class="token string">'下一页'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

<span class="token comment"># 查找value中存在'页'的所有value值</span>
soup.find_all<span class="token punctuation">(</span>string<span class="token operator">=</span>re.compile<span class="token punctuation">(</span><span class="token string">'页'</span><span class="token punctuation">))</span>

<span class="token comment"># 查找在value值的所有的string</span>
soup.find_all<span class="token punctuation">(</span>string<span class="token operator">=</span>True<span class="token punctuation">)</span>

<span class="token comment"># 查找所有value值是以'页'为结尾的value值</span>
soup.find_all<span class="token punctuation">(</span>string<span class="token operator">=</span>search_string<span class="token punctuation">)</span>
def search_string<span class="token punctuation">(</span>string<span class="token punctuation">)</span>:
    <span class="token builtin class-name">return</span> string and string.lower<span class="token punctuation">(</span><span class="token punctuation">)</span>.endswith<span class="token punctuation">(</span><span class="token string">'页'</span><span class="token punctuation">)</span>
</code></pre> 
  <h3>六、遍历文档树</h3> 
  <ul> 
   <li><code>contents</code>:返回的是一个包含所有儿子节点的列表。</li> 
   <li><code>children</code>:返回的是一个包含所有儿子节点的迭代器。</li> 
   <li><code>descendants</code>:返回的是一个包含所有子孙节点的生成器。</li> 
  </ul> 
  <p><strong>contents、children只包含直接儿子节点,descendants既包含儿子节点还包含孙子节点。</strong></p> 
  <h4>6.1 通过contents获取目标节点的所有子节点</h4> 
  <pre><code class="prism language-bash">tag_soup <span class="token operator">=</span> soup.find<span class="token punctuation">(</span><span class="token string">'div'</span>, <span class="token assign-left variable">class_</span><span class="token operator">=</span><span class="token string">'container'</span><span class="token punctuation">)</span>.contents
print<span class="token punctuation">(</span>type<span class="token punctuation">(</span>tag_soup<span class="token punctuation">))</span>
<span class="token keyword">for</span> <span class="token for-or-select variable">t</span> <span class="token keyword">in</span> tag_soup:
	<span class="token keyword">if</span> t <span class="token operator">!=</span> <span class="token string">'\n'</span><span class="token builtin class-name">:</span>  <span class="token comment"># 去掉换行符</span>
		print<span class="token punctuation">(</span>t<span class="token punctuation">)</span>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/6d2d98865445499a92abfc38dcfae2b2.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/6d2d98865445499a92abfc38dcfae2b2.jpg" alt="在这里插入图片描述" width="650" height="72"></a></p> 
  <h4>6.2 通过children获取目标节点的所有子节点</h4> 
  <pre><code class="prism language-bash">tag_soup <span class="token operator">=</span> soup.find<span class="token punctuation">(</span><span class="token string">'div'</span>, <span class="token assign-left variable">class_</span><span class="token operator">=</span><span class="token string">'container'</span><span class="token punctuation">)</span>.children
print<span class="token punctuation">(</span>type<span class="token punctuation">(</span>tag_soup<span class="token punctuation">))</span>
<span class="token keyword">for</span> <span class="token for-or-select variable">t</span> <span class="token keyword">in</span> tag_soup:
	<span class="token keyword">if</span> t <span class="token operator">!=</span> <span class="token string">'\n'</span><span class="token builtin class-name">:</span>  <span class="token comment"># 去掉换行符</span>
		print<span class="token punctuation">(</span>t<span class="token punctuation">)</span>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/71c0099e6b9a43a8bdd09538088adcdd.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/71c0099e6b9a43a8bdd09538088adcdd.jpg" alt="在这里插入图片描述" width="650" height="77"></a></p> 
  <h4>6.3 通过descendants获取目标节点的所有子孙节点</h4> 
  <pre><code class="prism language-bash">tag_soup <span class="token operator">=</span> soup.find<span class="token punctuation">(</span><span class="token string">'div'</span>, <span class="token assign-left variable">class_</span><span class="token operator">=</span><span class="token string">'container'</span><span class="token punctuation">)</span>.descendants
print<span class="token punctuation">(</span>type<span class="token punctuation">(</span>tag_soup<span class="token punctuation">))</span>
<span class="token keyword">for</span> <span class="token for-or-select variable">t</span> <span class="token keyword">in</span> tag_soup:
	<span class="token keyword">if</span> t <span class="token operator">!=</span> <span class="token string">'\n'</span><span class="token builtin class-name">:</span>  <span class="token comment"># 去掉换行符</span>
		print<span class="token punctuation">(</span>t<span class="token punctuation">)</span>
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/13f7418ac3b949d297df0f9ec7cbfea6.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/13f7418ac3b949d297df0f9ec7cbfea6.jpg" alt="Python之BeautifulSoup库详解_第1张图片" width="650" height="118" style="border:1px solid black;"></a></p> 
  <h4>6.4 通过parents获取目标节点的所有祖先节点</h4> 
  <pre><code class="prism language-bash">tag_soup <span class="token operator">=</span> soup.find<span class="token punctuation">(</span><span class="token string">'div'</span>, <span class="token assign-left variable">class_</span><span class="token operator">=</span><span class="token string">'container'</span><span class="token punctuation">)</span>.parents
print<span class="token punctuation">(</span>type<span class="token punctuation">(</span>tag_soup<span class="token punctuation">))</span>
<span class="token keyword">for</span> <span class="token for-or-select variable">t</span> <span class="token keyword">in</span> tag_soup:
	<span class="token keyword">if</span> t <span class="token operator">!=</span> <span class="token string">'\n'</span><span class="token builtin class-name">:</span>  <span class="token comment"># 去掉换行符</span>
		print<span class="token punctuation">(</span>t<span class="token punctuation">)</span>
</code></pre> 
  <h4>6.5 获取目标节点相关联的其他节点</h4> 
  <pre><code class="prism language-bash">a_soup <span class="token operator">=</span> soup.find<span class="token punctuation">(</span><span class="token string">'div'</span>, <span class="token assign-left variable">class_</span><span class="token operator">=</span><span class="token string">'container'</span><span class="token punctuation">)</span>.a  <span class="token comment"># 获取div里面的第一个<a>标签</span>

print<span class="token punctuation">(</span>a_soup.parent<span class="token punctuation">)</span>  <span class="token comment"># 获取<a>标签的父节点</span>

print<span class="token punctuation">(</span>a_soup.next_sibling<span class="token punctuation">)</span>  <span class="token comment"># 获取<a>标签的下一个兄弟节点</span>

print<span class="token punctuation">(</span>a_soup.previous_sibling<span class="token punctuation">)</span>  <span class="token comment"># 获取<a>标签的上一个兄弟节点</span>

print<span class="token punctuation">(</span>a_soup.next_siblings<span class="token punctuation">)</span>  <span class="token comment"># 获取<a>标签下面的所有兄弟节点</span>

print<span class="token punctuation">(</span>a_soup.previous_siblings<span class="token punctuation">)</span>  <span class="token comment"># 获取<a>标签上面的所有兄弟节点</span>
</code></pre> 
  <h3>七、css选择器</h3> 
  <h4>7.1 通过标签名查找</h4> 
  <pre><code class="prism language-bash"><span class="token comment"># 查找所有title标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'title'</span><span class="token punctuation">)</span>

<span class="token comment"># 查找div下的所有input标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'div input'</span><span class="token punctuation">)</span>

<span class="token comment"># 查找html节点下的head节点下的title标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">"html head title"</span><span class="token punctuation">)</span>
</code></pre> 
  <h4>7.2 通过id查找</h4> 
  <pre><code class="prism language-bash"><span class="token comment"># 查找id为id_text的标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">"#id_text"</span><span class="token punctuation">)</span>

<span class="token comment"># 查找id为id_text1、id_text2的标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">"#id_text1, #id_text2"</span><span class="token punctuation">)</span>

<span class="token comment"># 查找id为id_text1的input标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'input#id_text1'</span><span class="token punctuation">)</span>
</code></pre> 
  <h4>7.3 通过类名查找</h4> 
  <pre><code class="prism language-bash"><span class="token comment"># 查找类名为nextpage的标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">".nextpage"</span><span class="token punctuation">)</span>

<span class="token comment"># 查找类名为nextpage、active的标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'.nextpage, .active'</span><span class="token punctuation">)</span>

<span class="token comment"># 查找类名为nextpage的a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'a.nextpage'</span><span class="token punctuation">)</span>
</code></pre> 
  <h4>7.4 通过属性查找</h4> 
  <pre><code class="prism language-bash"><span class="token comment"># 选择有href属性的a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'a[href]'</span><span class="token punctuation">)</span>

<span class="token comment"># 选择href属性为index_2.html的a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'a[href="index_2.html"]'</span><span class="token punctuation">)</span>

<span class="token comment"># 选择href以index开头的a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'a[href^="index"]'</span><span class="token punctuation">)</span>

<span class="token comment"># 选择href以html结尾的a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'a[href$="html"]'</span><span class="token punctuation">)</span>

<span class="token comment"># 选择href属性包含index的a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">'a[href*="index"]'</span><span class="token punctuation">)</span>
</code></pre> 
  <h4>7.5 其他选择器</h4> 
  <pre><code class="prism language-bash"><span class="token comment"># 查找div标签下的a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">"div > a"</span><span class="token punctuation">)</span>

<span class="token comment"># 父节点中的第3个a标签</span>
soup.select<span class="token punctuation">(</span><span class="token string">"a:nth-of-type(3)"</span><span class="token punctuation">)</span>

<span class="token comment"># a标签之后的input标签(a和input有共同父节点)</span>
soup.select<span class="token punctuation">(</span><span class="token string">"a~input"</span><span class="token punctuation">)</span>
</code></pre> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1648026377691107328"></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,python,beautifulsoup,开发语言)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1891974566327152640.htm"
                           title="Python网络爬虫-WebSocket数据抓取" target="_blank">Python网络爬虫-WebSocket数据抓取</a>
                        <span class="text-muted">程序小勇</span>
<a class="tag" taget="_blank" href="/search/faiss/1.htm">faiss</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录前言1、WebSocket请求的分析通常涉及以下几个方面:2、利用WebSocket爬取数据总结最后,创作不易!非常感谢大家的关注、点赞、评论啦!谢谢三连哦!好人好运连连,学习进步!工作顺利哦!博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,</div>
                    </li>
                    <li><a href="/article/1891965733051625472.htm"
                           title="python 山脊图_(数据科学学习手札98)纯Python绘制满满艺术感的山脊地图" target="_blank">python 山脊图_(数据科学学习手札98)纯Python绘制满满艺术感的山脊地图</a>
                        <span class="text-muted">weixin_39780255</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%B1%B1%E8%84%8A%E5%9B%BE/1.htm">山脊图</a>
                        <div>1简介下面的这幅图可能很多读者朋友们都看到过,这是英国摇滚乐队JoyDivision在1979年发行的其第一张录音室专辑UnknownPleasures的封面,由艺术家PeterSaville基于射电脉冲星信号的数据图创作而成,成为了一种流行文化的符号标志。图1类似图1的风格,在地图制作中也存在着一种山脊地图,基于记录地表海拔信息的高程数据,我们可以利用水平方向上的基于实际位置海拔高度的曲线,来对</div>
                    </li>
                    <li><a href="/article/1891954504480387072.htm"
                           title="【Python 学习 / 5】函数详解(定义、参数、作用域、lambda、内置函数)" target="_blank">【Python 学习 / 5】函数详解(定义、参数、作用域、lambda、内置函数)</a>
                        <span class="text-muted">卜及中</span>
<a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80/1.htm">Python基础</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/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>文章目录一、函数1.定义函数1.1基本函数定义1.2带参数的函数1.3带返回值的函数2.参数传递2.1位置参数2.2默认参数2.3可变参数2.3.1使用`*args`2.3.2使用`**kwargs`2.4参数的混合使用3.作用域3.1局部和全局变量3.2`global`关键字输出:3.3`nonlocal`关键字输出:4.lambda表达式4.1基本用法4.2与`map()`、`filter()</div>
                    </li>
                    <li><a href="/article/1891947826292781056.htm"
                           title="leetcode简单(181-200)python" target="_blank">leetcode简单(181-200)python</a>
                        <span class="text-muted">九日火</span>
<a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>762.PrimeNumberofSetBitsinBinaryRepresentation(e-181)GiventwointegersLandR,findthecountofnumbersintherange[L,R](inclusive)havingaprimenumberofsetbitsintheirbinaryrepresentation.(Recallthatthenumberofs</div>
                    </li>
                    <li><a href="/article/1891934961057984512.htm"
                           title="PaddleOCR面板恢复python脚本--针对pdf的面板恢复" target="_blank">PaddleOCR面板恢复python脚本--针对pdf的面板恢复</a>
                        <span class="text-muted">zsh669</span>
<a class="tag" taget="_blank" href="/search/paddlepaddle/1.htm">paddlepaddle</a><a class="tag" taget="_blank" href="/search/ocr/1.htm">ocr</a><a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6/1.htm">百度</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a>
                        <div>问题在做一个项目的时候,使用PaddleOCR提供的模型,实现对图片或者pdf进行面板恢复,并保存为.docx文档。但是,官方的文档只提供了针对图片进行面板恢复的python脚本,没有提供pdf进行面板恢复的python脚本,官方只提供了pdf面板恢复的命令行使用方法,因此,我去看了PaddleOCR的源码,将命令行方法转换为python脚本准备工作环境配置和文档请参考:\ppstructure/</div>
                    </li>
                    <li><a href="/article/1891932310857641984.htm"
                           title="Python库 - transformers" target="_blank">Python库 - transformers</a>
                        <span class="text-muted">司南锤</span>
<a class="tag" taget="_blank" href="/search/PYTHON%E5%BA%93/1.htm">PYTHON库</a><a class="tag" taget="_blank" href="/search/python%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/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>
                        <div>transformers库是由HuggingFace开发的一个非常流行的Python库,用于自然语言处理(NLP)任务。它提供了大量的预训练模型,这些模型可以用于各种NLP任务,如文本分类、问答、翻译、摘要生成等。以下是关于transformers库的详细介绍:1.主要特点预训练模型:transformers库包含了多种预训练的语言模型,如BERT、GPT、T5、XLNet等。这些模型在大规模文本</div>
                    </li>
                    <li><a href="/article/1891931805938937856.htm"
                           title="【NLP-04】tranformers库保姆级使用教程---以BERT模型为例" target="_blank">【NLP-04】tranformers库保姆级使用教程---以BERT模型为例</a>
                        <span class="text-muted">云天徽上</span>
<a class="tag" taget="_blank" href="/search/NLP/1.htm">NLP</a><a class="tag" taget="_blank" href="/search/bert/1.htm">bert</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/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><a class="tag" taget="_blank" href="/search/numpy/1.htm">numpy</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>
                        <div>安装要安装一个非常轻量级的Transformers库,您可以执行以下步骤:1、打开终端或命令提示符。2、运行以下命令来安装Transformers库:pipinstalltransformers这将使用pip工具从PythonPackageIndex(PyPI)下载并安装Transformers库。请确保您的计算机上已经安装了pip。然后,您可以在Python代码中导入Transformers库:</div>
                    </li>
                    <li><a href="/article/1891930671186767872.htm"
                           title="利用 OpenCV 进行棋盘检测与透视变换" target="_blank">利用 OpenCV 进行棋盘检测与透视变换</a>
                        <span class="text-muted">萧鼎</span>
<a class="tag" taget="_blank" href="/search/python%E5%9F%BA%E7%A1%80%E5%88%B0%E8%BF%9B%E9%98%B6%E6%95%99%E7%A8%8B/1.htm">python基础到进阶教程</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</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>
                        <div>利用OpenCV进行棋盘检测与透视变换1.引言在计算机视觉领域,棋盘检测与透视变换是一个常见的任务,广泛应用于摄像机标定、文档扫描、增强现实(AR)等场景。本篇文章将详细介绍如何使用OpenCV进行棋盘检测,并通过透视变换将棋盘区域转换为一个标准的矩形图像。我们将基于一段Python代码进行分析,代码的主要任务包括:读取图像并进行预处理(灰度转换、自适应直方图均衡化、去噪)检测边缘并提取棋盘区域计</div>
                    </li>
                    <li><a href="/article/1891930419025211392.htm"
                           title="conda更换环境版本(比如torch版本)" target="_blank">conda更换环境版本(比如torch版本)</a>
                        <span class="text-muted">挨打且不服66</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>找到想要的torch版本pytorch官网torch过往的版本创建新环境condacreate--namemyenvpython=3.8condaactivatemyenvconda虚拟环境中安装CUDA和CUDNN深度学习用显卡训练的时候,需要安装与显卡对应的cuda和cudnn。但不同的项目所支持的pytorch版本是不一样的,而pytorch版本和cuda版本之间又是互相依赖的,所以如果可以</div>
                    </li>
                    <li><a href="/article/1891930292613083136.htm"
                           title="流行编程语言全解析:优势、应用与短板" target="_blank">流行编程语言全解析:优势、应用与短板</a>
                        <span class="text-muted">a小胡哦</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%2B%2B/1.htm">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/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a><a class="tag" taget="_blank" href="/search/r%E8%AF%AD%E8%A8%80/1.htm">r语言</a>
                        <div>Python:优势Python以其简洁、易读的语法闻名,新手能快速上手。丰富的库和框架,能极大地提高开发效率。适用领域数据科学与分析:处理和分析大规模数据集,进行数据可视化。典型示例:Google用Python进行数据分析,处理海量数据以支持各种业务决策。机器学习与人工智能:构建和训练模型。典型示例:OpenAI在很多人工智能项目中广泛使用Python,如GPT系列模型的研发。网络爬虫:轻松从网页</div>
                    </li>
                    <li><a href="/article/1891929029032865792.htm"
                           title="用conda虚拟环境解决py+torch环境问题" target="_blank">用conda虚拟环境解决py+torch环境问题</a>
                        <span class="text-muted">SevenZS</span>
<a class="tag" taget="_blank" href="/search/Note/1.htm">Note</a><a class="tag" taget="_blank" href="/search/anaconda/1.htm">anaconda</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>要事先安装wheelpipinstallwheelcondainstallnb_conda安装nb_conda这样可以在shell切换虚拟环境启动jupyternotebook后切换到虚拟环境创建虚拟环境condacreate-npython36python=3.6condaactivatepython36加载后再pip安装torch1.4+cu101所有版本torch放在某个文件夹,比如桌面后p</div>
                    </li>
                    <li><a href="/article/1891928649913921536.htm"
                           title="【报错】ImportError: cannot import name ‘get_refined_artifact_map‘ from ‘basicsr.losses.loss_util‘" target="_blank">【报错】ImportError: cannot import name ‘get_refined_artifact_map‘ from ‘basicsr.losses.loss_util‘</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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a>
                        <div>ImportError:cannotimportname'get_refined_artifact_map'from'basicsr.losses.loss_util'(xxx/lib/python3.10/site-packages/basicsr/losses/loss_util.py)解决办法:找到basicsr库网站缺失的部分如下,补充到原来的xxx/lib/python3.10/site</div>
                    </li>
                    <li><a href="/article/1891928269519908864.htm"
                           title="Python 用pytorch从头写Transformer源码,一行一解释;机器翻译实例代码;Transformer源码解读与实战" target="_blank">Python 用pytorch从头写Transformer源码,一行一解释;机器翻译实例代码;Transformer源码解读与实战</a>
                        <span class="text-muted">医学小达人</span>
<a class="tag" taget="_blank" href="/search/NLP/1.htm">NLP</a><a class="tag" taget="_blank" href="/search/LLMs/1.htm">LLMs</a><a class="tag" taget="_blank" href="/search/GPT/1.htm">GPT</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/transformer/1.htm">transformer</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>1.Transformer简介Transformer模型被提出的主要动机是解决序列处理任务的长距离依赖问题。传统的RNN和LSTM虽然能够处理序列任务,但因为它们在处理序列时需要一步步前进,因此其他信息无法立即对其产生影响,当序列变长时,长距离依赖的信息很可能会被丢失。为了解决这个问题,Transformer模型被设计出来,内核思想是利用自注意力机制,这样模型可以直接对输入序列的任意两个位置建立直</div>
                    </li>
                    <li><a href="/article/1891919815686287360.htm"
                           title="python正则表达式快速入门_Python 正则表达式入门" target="_blank">python正则表达式快速入门_Python 正则表达式入门</a>
                        <span class="text-muted">weixin_39955938</span>
<a class="tag" taget="_blank" href="/search/python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/1.htm">python正则表达式快速入门</a>
                        <div>本文主要为没有使用正则表达式经验的新手入门所写。转载请写明出处引子首先说正则表达式是什么?正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那</div>
                    </li>
                    <li><a href="/article/1891918048051392512.htm"
                           title="python正则表达式必知必会的基础" target="_blank">python正则表达式必知必会的基础</a>
                        <span class="text-muted">豆子前端</span>
<a class="tag" taget="_blank" href="/search/python%E5%9F%BA%E7%A1%80/1.htm">python基础</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a>
                        <div>文章目录正则表达式re.match()和re.search()SRE_Matchobjectre.match()re.search()(重点)re.flags小结re.sub()re.split()re.findall()re.fullmatch()re.compile()小结方法分类注意细节正则表达式网站参考资料正则表达式本文主要讲的是正则表达式在python中的简单使用,只介绍关键的几个方法函</div>
                    </li>
                    <li><a href="/article/1891915399897870336.htm"
                           title="在conda虚拟环境中安装jupyter lab-----deepseek问答记录" target="_blank">在conda虚拟环境中安装jupyter lab-----deepseek问答记录</a>
                        <span class="text-muted">溯源006</span>
<a class="tag" taget="_blank" href="/search/deepseek%E5%9B%9E%E7%AD%94%E8%AE%B0%E5%BD%95/1.htm">deepseek回答记录</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a><a class="tag" taget="_blank" href="/search/jupyter/1.htm">jupyter</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a>
                        <div>在Conda虚拟环境中安装JupyterLab的步骤如下:1.创建并激活Conda虚拟环境如果你还没有创建虚拟环境,可以使用以下命令创建一个新的虚拟环境并激活它:condacreate-nmyenvpython=3.x#将`myenv`替换为你的环境名称,`3.x`替换为所需的Python版本condaactivatemyenv2.安装JupyterLab在激活的虚拟环境中,使用以下命令安装Jup</div>
                    </li>
                    <li><a href="/article/1891913382441840640.htm"
                           title="单片机、嵌入式Linux开发大学自学路径" target="_blank">单片机、嵌入式Linux开发大学自学路径</a>
                        <span class="text-muted">Oriental Son</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/MCU/1.htm">MCU</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/mcu/1.htm">mcu</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>笔者所修读的专业为物联网工程,物联网工程是一门新兴的、热门的专业,其所涉及的学科更是又多又杂,既有计算机方向的编程语言(如C、C++、Java、Python等)、数据结构与算法、操作系统、移动端应用开发、机器学习等;软硬结合的方向有数字电路单片机开发、嵌入式Linux开发等;硬件、电路方向有电路分析、数字电路、模拟电路、传感器原理、RFID、FPGA开发等;涉及信号处理的有信号与系统、通信原理等。</div>
                    </li>
                    <li><a href="/article/1891911739977560064.htm"
                           title="深入解析 Poetry:Python 项目依赖管理的新宠,安装、使用及最佳实践" target="_blank">深入解析 Poetry: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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>在Python的世界里,管理项目依赖和虚拟环境一直是一个令人头疼的问题。虽然有pip和virtualenv这样的工具,但随着项目的复杂性增加,它们的局限性也逐渐显露出来。这时候,Poetry作为一个现代化的依赖管理工具应运而生。它不仅解决了项目依赖管理的问题,同时也集成了虚拟环境管理、发布等功能,成为了Python开发者的新宠。Poetry是什么?Poetry是一个用于管理Python项目依赖和构</div>
                    </li>
                    <li><a href="/article/1891905932133199872.htm"
                           title="【JAVA工程师从0开始学AI】,第二步:从强类型到动态语言:Java工程师的Python语法避坑指南" target="_blank">【JAVA工程师从0开始学AI】,第二步:从强类型到动态语言:Java工程师的Python语法避坑指南</a>
                        <span class="text-muted">架构默片</span>
<a class="tag" taget="_blank" href="/search/JAVA%E5%B7%A5%E7%A8%8B%E5%B8%88%E4%BB%8E0%E5%BC%80%E5%A7%8B%E5%AD%A6AI/1.htm">JAVA工程师从0开始学AI</a><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/windows/1.htm">windows</a>
                        <div>这是一篇介绍Python语法与JAVA语法区别文章,让我们以对比的方式,来学习一下Python的语法。首先我们看一下下面的Python代码,和具体在java当中分别代表了什么意思numbers=[1,2,3,4,5,6,7,8,9]#①创建数字列表(像Java的ArrayList,但不用写泛型)odd_numbers=[]#②准备装奇数的空列表(类似Java的newArrayListnumbers</div>
                    </li>
                    <li><a href="/article/1891903033600700416.htm"
                           title="052_爬虫_爬虫相关概念(引用《尚硅谷Python爬虫教程(小)小 白零基础速通》052章)" target="_blank">052_爬虫_爬虫相关概念(引用《尚硅谷Python爬虫教程(小)小 白零基础速通》052章)</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>
                        <div>爬虫解释:通过程序,根据url(http://taobao.com)进行网页的爬取获取有用的信息实用程序模拟浏览器,去向服务发送请求,获取响应信息爬虫的核心爬取网页:爬取整个网页包含了网页中所的内容解析数据:将网页中得到的数据进行解析难点:爬虫和但爬虫之间的博弈爬虫的类型实例通用爬虫百度,360,Google,搜狗等搜索引擎功能访问网页-》抓取数据-》数据储存-》数据处理-》提供检索服务robot</div>
                    </li>
                    <li><a href="/article/1891901898668175360.htm"
                           title="为一位经验丰富的程序员量身定制Python学习路线 人工智能首选语言:python Python新技术" target="_blank">为一位经验丰富的程序员量身定制Python学习路线 人工智能首选语言:python Python新技术</a>
                        <span class="text-muted">小黄人软件</span>
<a class="tag" taget="_blank" href="/search/chatGPT/1.htm">chatGPT</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>人工智能首选语言:python必学。解释型语言(无编译这个环节),直接执行代码,面向对象,脚本语言没基础在这里学为一位经验丰富的程序员量身定制Python学习路线,主要应关注于深化已有的编程知识和技能,并探索Python特有的高级特性。以下是推荐的学习路线:基础复习:如果对Python基础不熟悉,先从Python的基础语法、数据类型、控制流程等开始复习。高级语言特性:深入理解装饰器、上下文管理器、</div>
                    </li>
                    <li><a href="/article/1891901518991388672.htm"
                           title="强化学习:原理、概念与代码实践" target="_blank">强化学习:原理、概念与代码实践</a>
                        <span class="text-muted">AndrewHZ</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%96%B0%E6%B5%AA%E6%BD%AE/1.htm">深度学习新浪潮</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/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><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/deepseek/1.htm">deepseek</a>
                        <div>一、引言强化学习(ReinforcementLearning)作为机器学习的一个重要分支,旨在通过智能体(agent)与环境的交互,学习到最优的行为策略,以最大化长期累积奖励。它在机器人控制、游戏、自动驾驶、资源管理等众多领域都取得了显著的成功。本文将深入介绍强化学习的数学原理、核心概念,并通过公式推导来加深理解,同时结合一个具体的实例,使用Python语言进行代码实现,帮助读者全面掌握强化学习的</div>
                    </li>
                    <li><a href="/article/1891901012046835712.htm"
                           title="【Python基础】Python闭包:如何让你的代码拥有‘读心术’?" target="_blank">【Python基础】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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/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%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>第1章闭包概念与背景1.1闭包定义与理论基础闭包,这一术语源自数学逻辑,如今在计算机科学中占据着核心地位,尤其在面向对象和函数式编程领域中发挥着无可替代的作用。它是一种特殊的函数对象,不仅包含自身的代码逻辑,还携带着其定义时所处环境的部分状态,即对外部自由变量的引用。这种独特的“携带状态”特性赋予了闭包强大的功能和灵活性,使其成为实现抽象、封装、数据隐藏以及控制程序执行的关键工具。1.1.1闭包的</div>
                    </li>
                    <li><a href="/article/1891900885601153024.htm"
                           title="python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理" target="_blank">python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理</a>
                        <span class="text-muted">Scikit-learn</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/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>SIGIA_4Ppython学习列表字典集合面对对象编程闭包装饰器函数式编程作用域异常处理本文连接简介SIGIA_4P网址a.课程OKRObjectivesandKeyResults即目标与关键成果法目标,Objectives:掌握AI领域的Python开发成果1KR1linux目录结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r864ykpN-16917885</div>
                    </li>
                    <li><a href="/article/1891899750693793792.htm"
                           title="尚硅谷爬虫note007" target="_blank">尚硅谷爬虫note007</a>
                        <span class="text-muted">CSDNy666999</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>一、urllib—异常1.urllib.error.HTTPError2.urllib.error.URLError#_*_coding:utf-8_*_#@Time:2025/2/1411:33#@Author:20250206-里奥#@File:demo26_异常#@Project:PythonProject10-14importurllib.requestimporturllib.error</div>
                    </li>
                    <li><a href="/article/1891895966995378176.htm"
                           title="【JAVA工程师从0开始学AI】,第四步:闭包与高阶函数——用Python的“魔法函数“重构Java思维" target="_blank">【JAVA工程师从0开始学AI】,第四步:闭包与高阶函数——用Python的“魔法函数“重构Java思维</a>
                        <span class="text-muted">架构默片</span>
<a class="tag" taget="_blank" href="/search/JAVA%E5%B7%A5%E7%A8%8B%E5%B8%88%E4%BB%8E0%E5%BC%80%E5%A7%8B%E5%AD%A6AI/1.htm">JAVA工程师从0开始学AI</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>副标题:当严谨的Java遇上"七十二变"的Python函数式编程历经变量战争、语法迷雾、函数对决,此刻我们将踏入Python最迷人的领域——函数式编程。当Java工程师还在用接口和匿名类实现回调时,Python的闭包已化身"智能机器人",带着"记忆传承"的能力自由穿梭于代码之间。这里没有类的枷锁,函数既是武器又是盾牌,高阶函数组合出的"代码万花筒",正是AI数据处理、模型训练的核心密码。本文将用J</div>
                    </li>
                    <li><a href="/article/1891895084333461504.htm"
                           title="【蓝桥杯集训·每日一题2025】 AcWing 6122. 农夫约翰的奶酪块 python" target="_blank">【蓝桥杯集训·每日一题2025】 AcWing 6122. 农夫约翰的奶酪块 python</a>
                        <span class="text-muted">查理零世</span>
<a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>Week12月17日农夫约翰的奶酪块农夫约翰有一块立方体形状的奶酪,它位于三维坐标空间中,从(0,0,0)(0,0,0)(0,0,0)延伸至(N,N,N)(N,N,N)(N,N,N)。农夫约翰将对他的奶酪块执行一系列QQQ次更新操作。对于每次更新操作,农夫约翰将从整数坐标(x,y,z)(x,y,z)(x,y,z)到(x+1,y+1,z+1)(x+1,y+1,z+1)(x+1,y+1,z+1)处切割</div>
                    </li>
                    <li><a href="/article/1891893823349518336.htm"
                           title="跟我一起学Python数据处理(六十八):用图表让数据可视化" target="_blank">跟我一起学Python数据处理(六十八):用图表让数据可视化</a>
                        <span class="text-muted">lilye66</span>
<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/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/pandas/1.htm">pandas</a>
                        <div>跟我一起学Python数据处理(六十八):用图表让数据可视化大家好!在数据处理的学习道路上,我一直希望能和大家携手共进、共同成长。今天咱们继续深入学习Python数据处理中的重要内容——数据可视化。学会用合适的图表展示数据,不仅能让数据变得直观易懂,还能帮助我们发现数据背后隐藏的信息和规律。话不多说,咱们马上开始今天的学习之旅!一、不同图表的特点与应用场景在数据可视化的世界里,有各种各样的图表,每</div>
                    </li>
                    <li><a href="/article/1891893823982858240.htm"
                           title="跟我一起学Python数据处理(六十九):用Bokeh实现数据可视化及时间序列数据处理" target="_blank">跟我一起学Python数据处理(六十九):用Bokeh实现数据可视化及时间序列数据处理</a>
                        <span class="text-muted">lilye66</span>
<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/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/pandas/1.htm">pandas</a>
                        <div>跟我一起学Python数据处理(六十九):用Bokeh实现数据可视化及时间序列数据处理大家好!一直以来,我都希望能和各位小伙伴在Python数据处理的学习道路上并肩前行,共同进步。今天,咱们继续深入探索数据处理中的数据可视化环节,重点学习Bokeh库的使用以及时间相关数据的处理与展示。掌握这些知识,能让我们更高效地挖掘数据价值,把数据背后的故事清晰地呈现出来。话不多说,开启今天的学习之旅吧!一、B</div>
                    </li>
                    <li><a href="/article/1891893318590197760.htm"
                           title="借助 Python 的 SQLAlchemy 库查询数据" target="_blank">借助 Python 的 SQLAlchemy 库查询数据</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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sqlserver/1.htm">sqlserver</a>
                        <div>SQLAlchemy库是一个非常强大又相当灵活的库,它在关系型数据库与传统编程之间建起了一座桥梁。它允许我们使用原始的SQL执行查询,同时也提供了高级的方法来查询和更新数据库。本文仅简要介绍使用原生SQL执行查询部分。使用SQLAlchemy查询MySQL的数据首先需要安装sqlalchemy库和pymysql库;使用sqlalchemy的create_engine()方法,并借助pymysql驱</div>
                    </li>
                                <li><a href="/article/41.htm"
                                       title="html页面js获取参数值" target="_blank">html页面js获取参数值</a>
                                    <span class="text-muted">0624chenhong</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                                    <div>1.js获取参数值js 
function GetQueryString(name) 
 { 
      var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); 
      var r = windo</div>
                                </li>
                                <li><a href="/article/168.htm"
                                       title="MongoDB 在多线程高并发下的问题" target="_blank">MongoDB 在多线程高并发下的问题</a>
                                    <span class="text-muted">BigCat2013</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/DB/1.htm">DB</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%B9%B6%E5%8F%91/1.htm">高并发</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E5%A4%8D%E6%95%B0%E6%8D%AE/1.htm">重复数据</a>
                                    <div>最近项目用到 MongoDB , 主要是一些读取数据及改状态位的操作. 因为是结合了最近流行的 Storm进行大数据的分析处理,并将分析结果插入Vertica数据库,所以在多线程高并发的情境下, 会发现 Vertica 数据库中有部分重复的数据. 这到底是什么原因导致的呢?笔者开始也是一筹莫 展,重复去看 MongoDB 的 API , 终于有了新发现 : 
com.mongodb.DB 这个类有</div>
                                </li>
                                <li><a href="/article/295.htm"
                                       title="c++ 用类模版实现链表(c++语言程序设计第四版示例代码)" target="_blank">c++ 用类模版实现链表(c++语言程序设计第四版示例代码)</a>
                                    <span class="text-muted">CrazyMizzz</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>#include<iostream>
#include<cassert>
using namespace std;
template<class T>
class Node
{
private:
	Node<T> * next;
public:
	T data;                                    </div>
                                </li>
                                <li><a href="/article/422.htm"
                                       title="最近情况" target="_blank">最近情况</a>
                                    <span class="text-muted">麦田的设计者</span>
<a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%85%A8/1.htm">感慨</a><a class="tag" taget="_blank" href="/search/%E8%80%83%E8%AF%95/1.htm">考试</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a>
                                    <div>   在五月黄梅天的岁月里,一年两次的软考又要开始了。到目前为止,我已经考了多达三次的软考,最后的结果就是通过了初级考试(程序员)。人啊,就是不满足,考了初级就希望考中级,于是,这学期我就报考了中级,明天就要考试。感觉机会不大,期待奇迹发生吧。这个学期忙于练车,写项目,反正最后是一团糟。后天还要考试科目二。这个星期真的是很艰难的一周,希望能快点度过。 
  </div>
                                </li>
                                <li><a href="/article/549.htm"
                                       title="linux系统中用pkill踢出在线登录用户" target="_blank">linux系统中用pkill踢出在线登录用户</a>
                                    <span class="text-muted">被触发</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍所以需要有时踢出指定的用户 
1/#who   查出当前有那些终端登录(用 w 命令更详细) 
# who 
root     pts/0        2010-10-28 09:36 (192</div>
                                </li>
                                <li><a href="/article/676.htm"
                                       title="仿QQ聊天第二版" target="_blank">仿QQ聊天第二版</a>
                                    <span class="text-muted">肆无忌惮_</span>
<a class="tag" taget="_blank" href="/search/qq/1.htm">qq</a>
                                    <div>在第一版之上的改进内容: 
 第一版链接: 
http://479001499.iteye.com/admin/blogs/2100893 
  
用map存起来号码对应的聊天窗口对象,解决私聊的时候所有消息发到一个窗口的问题. 
增加ViewInfo类,这个是信息预览的窗口,如果是自己的信息,则可以进行编辑. 
  
信息修改后上传至服务器再告诉所有用户,自己的窗口</div>
                                </li>
                                <li><a href="/article/803.htm"
                                       title="java读取配置文件" target="_blank">java读取配置文件</a>
                                    <span class="text-muted">知了ing</span>

                                    <div>1,java读取.properties配置文件 
 
InputStream in;
		try {
			in = test.class.getClassLoader().getResourceAsStream("config/ipnetOracle.properties");//配置文件的路径
		    Properties p = new Properties()</div>
                                </li>
                                <li><a href="/article/930.htm"
                                       title="__attribute__ 你知多少?" target="_blank">__attribute__ 你知多少?</a>
                                    <span class="text-muted">矮蛋蛋</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/gcc/1.htm">gcc</a>
                                    <div>原文地址: 
http://www.cnblogs.com/astwish/p/3460618.html 
GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。 
 
__attribute__ 书写特征是:</div>
                                </li>
                                <li><a href="/article/1057.htm"
                                       title="jsoup使用笔记" target="_blank">jsoup使用笔记</a>
                                    <span class="text-muted">alleni123</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/JSoup/1.htm">JSoup</a>
                                    <div><dependency>
	<groupId>org.jsoup</groupId>
	<artifactId>jsoup</artifactId>
	<version>1.7.3</version>
</dependency>
 
 
 
 
 
2014/08/28 
今天遇到这种形式, </div>
                                </li>
                                <li><a href="/article/1184.htm"
                                       title="JAVA中的集合 Collectio 和Map的简单使用及方法" target="_blank">JAVA中的集合 Collectio 和Map的简单使用及方法</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/map/1.htm">map</a><a class="tag" taget="_blank" href="/search/set/1.htm">set</a>
                                    <div>         List ,set ,map的使用方法和区别 
java容器类类库的用途是保存对象,并将其分为两个概念: 
    Collection集合:一个独立的序列,这些序列都服从一条或多条规则;List必须按顺序保存元素  ,set不能重复元素;Queue按照排队规则来确定对象产生的顺序(通常与他们被插入的</div>
                                </li>
                                <li><a href="/article/1311.htm"
                                       title="杀LINUX的JOB进程" target="_blank">杀LINUX的JOB进程</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a>
                                    <div>今天发现数据库一个JOB一直在执行,都执行了好几个小时还在执行,所以想办法给删除掉 
  
系统环境: 
   ORACLE 10G 
   Linux操作系统 
  
操作步骤如下: 
第一步.查询出来那个job在运行,找个对应的SID字段 
select * from dba_jobs_running--找到job对应的sid 
&n</div>
                                </li>
                                <li><a href="/article/1438.htm"
                                       title="Spring AOP详解" target="_blank">Spring AOP详解</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a>
                                    <div>        最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决。一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习Spring AOP相关的内容。例如,以下需求不用AOP肯定也能解决,至于是否牵强附会,仁者见仁智者见智。 
1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用</div>
                                </li>
                                <li><a href="/article/1565.htm"
                                       title="[Gson六]Gson类型适配器(TypeAdapter)" target="_blank">[Gson六]Gson类型适配器(TypeAdapter)</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Adapter/1.htm">Adapter</a>
                                    <div>TypeAdapter的使用动机 
 Gson在序列化和反序列化时,默认情况下,是按照POJO类的字段属性名和JSON串键进行一一映射匹配,然后把JSON串的键对应的值转换成POJO相同字段对应的值,反之亦然,在这个过程中有一个JSON串Key对应的Value和对象之间如何转换(序列化/反序列化)的问题。 
  
以Date为例,在序列化和反序列化时,Gson默认使用java.</div>
                                </li>
                                <li><a href="/article/1692.htm"
                                       title="【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行" target="_blank">【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/driver/1.htm">driver</a>
                                    <div>Driver Program是用户编写的提交给Spark集群执行的application,它包含两部分 
 
 作为驱动: Driver与Master、Worker协作完成application进程的启动、DAG划分、计算任务封装、计算任务分发到各个计算节点(Worker)、计算资源的分配等。 
 计算逻辑本身,当计算任务在Worker执行时,执行计算逻辑完成application的计算任务 
 </div>
                                </li>
                                <li><a href="/article/1819.htm"
                                       title="nginx 经验总结" target="_blank">nginx 经验总结</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/nginx+%E6%80%BB%E7%BB%93/1.htm">nginx 总结</a>
                                    <div>   深感nginx的强大,只学了皮毛,把学下的记录。 
   获取Header 信息,一般是以$http_XX(XX是小写) 
           获取body,通过接口,再展开,根据K取V 
   获取uri,以$arg_XX 
     &n</div>
                                </li>
                                <li><a href="/article/1946.htm"
                                       title="轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点" target="_blank">轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a>
                                    <div>
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class ExoWeb {

	public static void main(String[] args) {
		ExoWeb ew=new ExoWeb();
		
		System.out.pri</div>
                                </li>
                                <li><a href="/article/2073.htm"
                                       title="Netty源码学习-Java-NIO-Reactor" target="_blank">Netty源码学习-Java-NIO-Reactor</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/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a>
                                    <div>Netty里面采用了NIO-based Reactor Pattern 
了解这个模式对学习Netty非常有帮助 
 
参考以下两篇文章: 
 
http://jeewanthad.blogspot.com/2013/02/reactor-pattern-explained-part-1.html 
 
http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 
</div>
                                </li>
                                <li><a href="/article/2200.htm"
                                       title="AOP通俗理解" target="_blank">AOP通俗理解</a>
                                    <span class="text-muted">cngolon</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a>
                                    <div>1.我所知道的aop     初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等。一下子让你不知所措,心想着:怪不得很多人都和 我说aop多难多难。当我看进去以后,我才发现:它就是一些java基础上的朴实无华的应用,包括ioc,包括许许多多这样的名词,都是万变不离其宗而 已。 2.为什么用aop&nb</div>
                                </li>
                                <li><a href="/article/2327.htm"
                                       title="cursor variable 实例" target="_blank">cursor variable 实例</a>
                                    <span class="text-muted">ctrain</span>
<a class="tag" taget="_blank" href="/search/variable/1.htm">variable</a>
                                    <div>
create or replace procedure proc_test01
as 
type emp_row is record(
empno emp.empno%type,
ename emp.ename%type,
job emp.job%type,
mgr emp.mgr%type,
hiberdate emp.hiredate%type,
sal emp.sal%t</div>
                                </li>
                                <li><a href="/article/2454.htm"
                                       title="shell报bash: service: command not found解决方法" target="_blank">shell报bash: service: command not found解决方法</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/jps/1.htm">jps</a>
                                    <div>今天在执行一个脚本时,本来是想在脚本中启动hdfs和hive等程序,可以在执行到service hive-server start等启动服务的命令时会报错,最终解决方法记录一下: 
  
脚本报错如下: 
./olap_quick_intall.sh: line 57: service: command not found 
./olap_quick_intall.sh: line 59</div>
                                </li>
                                <li><a href="/article/2581.htm"
                                       title="40个迹象表明你还是PHP菜鸟" target="_blank">40个迹象表明你还是PHP菜鸟</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/oop/1.htm">oop</a>
                                    <div>你是PHP菜鸟,如果你:1. 不会利用如phpDoc 这样的工具来恰当地注释你的代码2. 对优秀的集成开发环境如Zend Studio 或Eclipse PDT 视而不见3. 从未用过任何形式的版本控制系统,如Subclipse4. 不采用某种编码与命名标准 ,以及通用约定,不能在项目开发周期里贯彻落实5. 不使用统一开发方式6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函</div>
                                </li>
                                <li><a href="/article/2708.htm"
                                       title="Android逐帧动画的实现" target="_blank">Android逐帧动画的实现</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>一、代码实现: 
private ImageView iv;
	private AnimationDrawable ad;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout</div>
                                </li>
                                <li><a href="/article/2835.htm"
                                       title="java远程调用linux的命令或者脚本" target="_blank">java远程调用linux的命令或者脚本</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ganymed-ssh2/1.htm">ganymed-ssh2</a>
                                    <div>转载请出自出处:
http://eksliang.iteye.com/blog/2105862  
    
   Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)  
 使用步骤如下: 
1.导包 
官网下载: 
http://www.ganymed.ethz.ch/ssh2/ 
ma</div>
                                </li>
                                <li><a href="/article/2962.htm"
                                       title="adb端口被占用问题" target="_blank">adb端口被占用问题</a>
                                    <span class="text-muted">gqdy365</span>
<a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a>
                                    <div>最近重新安装的电脑,配置了新环境,老是出现: 
 
 

 adb server is out of date.  killing...  
    ADB server didn't ACK  
    * failed to start daemon *  
 
百度了一下,说是端口被占用,我开个eclipse,然后打开cmd,就提示这个,很烦人。 
 
一个比较彻底的解决办法就是修改</div>
                                </li>
                                <li><a href="/article/3089.htm"
                                       title="ASP.NET使用FileUpload上传文件" target="_blank">ASP.NET使用FileUpload上传文件</a>
                                    <span class="text-muted">hvt</span>
<a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/webform/1.htm">webform</a>
                                    <div>前台代码: 
<asp:FileUpload ID="fuKeleyi" runat="server" />
<asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" /></div>
                                </li>
                                <li><a href="/article/3216.htm"
                                       title="代码之谜(四)- 浮点数(从惊讶到思考)" target="_blank">代码之谜(四)- 浮点数(从惊讶到思考)</a>
                                    <span class="text-muted">justjavac</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%AE%E7%82%B9%E6%95%B0/1.htm">浮点数</a><a class="tag" taget="_blank" href="/search/%E7%B2%BE%E5%BA%A6/1.htm">精度</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E4%B9%8B%E8%B0%9C/1.htm">代码之谜</a><a class="tag" taget="_blank" href="/search/IEEE/1.htm">IEEE</a>
                                    <div>在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。 
单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试 
记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为了一名很出色的</div>
                                </li>
                                <li><a href="/article/3343.htm"
                                       title="数据结构随记_1" target="_blank">数据结构随记_1</a>
                                    <span class="text-muted">lx.asymmetric</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                                    <div>第一章 
  1.数据结构包括数据的
逻辑结构、数据的物理/存储结构和数据的逻辑关系这三个方面的内容。 2.数据的存储结构可用四种基本的存储方法表示,它们分别是
顺序存储、链式存储 、索引存储 和 散列存储。 3.数据运算最常用的有五种,分别是
 查找/检索、排序、插入、删除、修改。 4.算法主要有以下五个特性: 
输入、输出、可行性、确定性和有穷性。 5.算法分析的</div>
                                </li>
                                <li><a href="/article/3470.htm"
                                       title="linux的会话和进程组" target="_blank">linux的会话和进程组</a>
                                    <span class="text-muted">网络接口</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>会话: 一个或多个进程组。起于用户登录,终止于用户退出。此期间所有进程都属于这个会话期。会话首进程:调用setsid创建会话的进程1.规定组长进程不能调用setsid,因为调用setsid后,调用进程会成为新的进程组的组长进程.如何保证? 先调用fork,然后终止父进程,此时由于子进程的进程组ID为父进程的进程组ID,而子进程的ID是重新分配的,所以保证子进程不会是进程组长,从而子进程可以调用se</div>
                                </li>
                                <li><a href="/article/3597.htm"
                                       title="二维数组 元素的连续求解" target="_blank">二维数组 元素的连续求解</a>
                                    <span class="text-muted">1140566087</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/ACM/1.htm">ACM</a>
                                    <div>import java.util.HashMap;




public class Title {
	public static void main(String[] args){
		f();
	}

	// 二位数组的应用
	//12、二维数组中,哪一行或哪一列的连续存放的0的个数最多,是几个0。注意,是“连续”。
	public static void f(){
</div>
                                </li>
                                <li><a href="/article/3724.htm"
                                       title="也谈什么时候Java比C++快" target="_blank">也谈什么时候Java比C++快</a>
                                    <span class="text-muted">windshome</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>  
刚打开iteye就看到这个标题“Java什么时候比C++快”,觉得很好笑。 
  
你要比,就比同等水平的基础上的相比,笨蛋写得C代码和C++代码,去和高手写的Java代码比效率,有什么意义呢? 
  
我是写密码算法的,深刻知道算法C和C++实现和Java实现之间的效率差,甚至也比对过C代码和汇编代码的效率差,计算机是个死的东西,再怎么优化,Java也就是和C</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>