Python爬虫(六)--Scrapy框架学习

本文希望达到以下目标:

  1. 简要介绍Scarpy
  2. 阅读官网入门文档并实现文档中的范例
  3. 使用Scarpy优豆瓣爬虫的抓取
  4. 制定下一步学习目标

初学Scrapy, 如有翻译不当, 或者代码错误, 请指出, 非常感谢

1. Scrapy简介


Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试

Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下

Scrapy

Scrapy主要包括了以下组件:

  • 引擎(Scrapy): 用来处理整个系统的数据流处理, 触发事务(框架核心)
  • 调度器(Scheduler): 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  • 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
  • 爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
  • 项目管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
  • 下载器中间件(Downloader Middlewares): 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
  • 爬虫中间件(Spider Middlewares): 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
  • 调度中间件(Scheduler Middewares): 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

Scrapy运行流程大概如下:

  1. 首先,引擎从调度器中取出一个链接(URL)用于接下来的抓取
  2. 引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)
  3. 然后,爬虫解析Response
  4. 若是解析出实体(Item),则交给实体管道进行进一步的处理。
  5. 若是解析出的是链接(URL),则把URL交给Scheduler等待抓取

2. 安装Scrapy


使用以下命令:

sudo pip install virtualenv  #安装虚拟环境工具
virtualenv ENV  #创建一个虚拟环境目录
source ./ENV/bin/active  #激活虚拟环境
pip install Scrapy
#验证是否安装成功
pip list
#输出如下
cffi (0.8.6)
cryptography (0.6.1)
cssselect (0.9.1)
lxml (3.4.1)
pip (1.5.6)
pycparser (2.10)
pyOpenSSL (0.14)
queuelib (1.2.2)
Scrapy (0.24.4)
setuptools (3.6)
six (1.8.0)
Twisted (14.0.2)
w3lib (1.10.0)
wsgiref (0.1.2)
zope.interface (4.1.1)

更多虚拟环境的操作可以查看我的博文

3. Scrapy Tutorial


在抓取之前, 你需要新建一个Scrapy工程. 进入一个你想用来保存代码的目录,然后执行:

$ scrapy startproject tutorial

这个命令会在当前目录下创建一个新目录 tutorial, 它的结构如下:

.
├── scrapy.cfg
└── tutorial
    ├── __init__.py
    ├── items.py
    ├── pipelines.py
    ├── settings.py
    └── spiders
        └── __init__.py

这些文件主要是:

  • scrapy.cfg: 项目配置文件
  • tutorial/: 项目python模块, 之后您将在此加入代码
  • tutorial/items.py: 项目items文件
  • tutorial/pipelines.py: 项目管道文件
  • tutorial/settings.py: 项目配置文件
  • tutorial/spiders: 放置spider的目录

3.1. 定义Item

Items是将要装载抓取的数据的容器,它工作方式像 python 里面的字典,但它提供更多的保护,比如对未定义的字段填充以防止拼写错误

通过创建scrapy.Item类, 并且定义类型为 scrapy.Field 的类属性来声明一个Item.
我们通过将需要的item模型化,来控制从 dmoz.org 获得的站点数据,比如我们要获得站点的名字,url 和网站描述,我们定义这三种属性的域。在 tutorial 目录下的 items.py 文件编辑

from scrapy.item import Item, Field


class DmozItem(Item):
    # define the fields for your item here like:
    name = Field()
    description = Field()
    url = Field()

3.2. 编写Spider

Spider 是用户编写的类, 用于从一个域(或域组)中抓取信息, 定义了用于下载的URL的初步列表, 如何跟踪链接,以及如何来解析这些网页的内容用于提取items。

要建立一个 Spider,继承 scrapy.Spider 基类,并确定三个主要的、强制的属性:

  • name:爬虫的识别名,它必须是唯一的,在不同的爬虫中你必须定义不同的名字.
  • start_urls:包含了Spider在启动时进行爬取的url列表。因此,第一个被获取到的页面将是其中之一。后续的URL则从初始的URL获取到的数据中提取。我们可以利用正则表达式定义和过滤需要进行跟进的链接。
  • parse():是spider的一个方法。被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
    这个方法负责解析返回的数据、匹配抓取的数据(解析为 item )并跟踪更多的 URL。

在 /tutorial/tutorial/spiders 目录下创建 dmoz_spider.py

import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        filename = response.url.split("/")[-2]
        with open(filename, 'wb') as f:
            f.write(response.body)

3.3. 爬取

当前项目结构

├── scrapy.cfg
└── tutorial
    ├── __init__.py
    ├── items.py
    ├── pipelines.py
    ├── settings.py
    └── spiders
        ├── __init__.py
        └── dmoz_spider.py

到项目根目录, 然后运行命令:

$ scrapy crawl dmoz

运行结果:

2014-12-15 09:30:59+0800 [scrapy] INFO: Scrapy 0.24.4 started (bot: tutorial)
2014-12-15 09:30:59+0800 [scrapy] INFO: Optional features available: ssl, http11
2014-12-15 09:30:59+0800 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'tutorial.spiders', 'SPIDER_MODULES': ['tutorial.spiders'], 'BOT_NAME': 'tutorial'}
2014-12-15 09:30:59+0800 [scrapy] INFO: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
2014-12-15 09:30:59+0800 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2014-12-15 09:30:59+0800 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2014-12-15 09:30:59+0800 [scrapy] INFO: Enabled item pipelines:
2014-12-15 09:30:59+0800 [dmoz] INFO: Spider opened
2014-12-15 09:30:59+0800 [dmoz] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2014-12-15 09:30:59+0800 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2014-12-15 09:30:59+0800 [scrapy] DEBUG: Web service listening on 127.0.0.1:6080
2014-12-15 09:31:00+0800 [dmoz] DEBUG: Crawled (200)  (referer: None)
2014-12-15 09:31:00+0800 [dmoz] DEBUG: Crawled (200)  (referer: None)
2014-12-15 09:31:00+0800 [dmoz] INFO: Closing spider (finished)
2014-12-15 09:31:00+0800 [dmoz] INFO: Dumping Scrapy stats:
    {'downloader/request_bytes': 516,
     'downloader/request_count': 2,
     'downloader/request_method_count/GET': 2,
     'downloader/response_bytes': 16338,
     'downloader/response_count': 2,
     'downloader/response_status_count/200': 2,
     'finish_reason': 'finished',
     'finish_time': datetime.datetime(2014, 12, 15, 1, 31, 0, 666214),
     'log_count/DEBUG': 4,
     'log_count/INFO': 7,
     'response_received_count': 2,
     'scheduler/dequeued': 2,
     'scheduler/dequeued/memory': 2,
     'scheduler/enqueued': 2,
     'scheduler/enqueued/memory': 2,
     'start_time': datetime.datetime(2014, 12, 15, 1, 30, 59, 533207)}
2014-12-15 09:31:00+0800 [dmoz] INFO: Spider closed (finished)

3.4. 提取Items

3.4.1. 介绍Selector

从网页中提取数据有很多方法。Scrapy使用了一种基于 XPath 或者 CSS 表达式机制: Scrapy Selectors

出XPath表达式的例子及对应的含义:

  • /html/head/title: 选择HTML文档中 标签内的 </code> 元素</li> <li> <code>/html/head/title/text()</code>: 选择 <code><title></code> 元素内的文本</li> <li> <code>//td</code>: 选择所有的 <code><td></code> 元素</li> <li> <code>//div[@class="mine"]</code>: 选择所有具有<code>class="mine"</code> 属性的 div 元素</li> </ul> <blockquote> <p>等多强大的功能使用可以查看XPath tutorial</p> </blockquote> <p>为了方便使用 XPaths,Scrapy 提供 Selector 类, 有四种方法 :</p> <ul> <li>xpath():返回selectors列表, 每一个selector表示一个xpath参数表达式选择的节点.</li> <li>css() : 返回selectors列表, 每一个selector表示CSS参数表达式选择的节点</li> <li>extract():返回一个unicode字符串,该字符串为XPath选择器返回的数据</li> <li>re(): 返回unicode字符串列表,字符串作为参数由正则表达式提取出来</li> </ul> <h3>3.4.2. 取出数据</h3> <p>首先使用谷歌浏览器开发者工具, 查看网站源码, 来看自己需要取出的数据形式(这种方法比较麻烦), 更简单的方法是直接对感兴趣的东西右键<code>审查元素</code>, 可以直接查看网站源码</p> <p>在查看网站源码后, 网站信息在第二个<code><ul></code>内</p> <pre><code><ul class="directory-url" style="margin-left:0;"> <li><a href="http://www.pearsonhighered.com/educator/academic/product/0,,0130260363,00%2Ben-USS_01DBC.html" class="listinglink">Core Python Programming</a> - By Wesley J. Chun; Prentice Hall PTR, 2001, ISBN 0130260363. For experienced developers to improve extant skills; professional level examples. Starts by introducing syntax, objects, error handling, functions, classes, built-ins. [Prentice Hall] <div class="flag"><a href="/public/flag?cat=Computers%2FProgramming%2FLanguages%2FPython%2FBooks&url=http%3A%2F%2Fwww.pearsonhighered.com%2Feducator%2Facademic%2Fproduct%2F0%2C%2C0130260363%2C00%252Ben-USS_01DBC.html"><img src="/img/flag.png" alt="[!]" title="report an issue with this listing"></a></div> </li> ...省略部分... </ul> </code></pre> <p>那么就可以通过一下方式进行提取数据</p> <pre><code class="python">#通过如下命令选择每个在网站中的 <li> 元素: sel.xpath('//ul/li') #网站描述: sel.xpath('//ul/li/text()').extract() #网站标题: sel.xpath('//ul/li/a/text()').extract() #网站链接: sel.xpath('//ul/li/a/@href').extract() #如前所述,每个 xpath() 调用返回一个 selectors 列表,所以我们可以结合 xpath() 去挖掘更深的节点。我们将会用到这些特性,所以: for sel in response.xpath('//ul/li') title = sel.xpath('a/text()').extract() link = sel.xpath('a/@href').extract() desc = sel.xpath('text()').extract() print title, link, desc </code></pre> <p>在已有的爬虫文件中修改代码</p> <pre><code>import scrapy class DmozSpider(scrapy.Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): for sel in response.xpath('//ul/li'): title = sel.xpath('a/text()').extract() link = sel.xpath('a/@href').extract() desc = sel.xpath('text()').extract() print title, link, desc </code></pre> <h3>3.4.3. 使用item</h3> <p><code>Item</code>对象是自定义的python字典,可以使用标准的字典语法来获取到其每个字段的值(字段即是我们之前用Field赋值的属性)</p> <pre><code>>>> item = DmozItem() >>> item['title'] = 'Example title' >>> item['title'] 'Example title' </code></pre> <p>一般来说,Spider将会将爬取到的数据以 Item 对象返回, 最后修改爬虫类,使用 Item 来保存数据,代码如下</p> <pre><code class="python">from scrapy.spider import Spider from scrapy.selector import Selector from tutorial.items import DmozItem class DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/", ] def parse(self, response): sel = Selector(response) sites = sel.xpath('//ul[@class="directory-url"]/li') items = [] for site in sites: item = DmozItem() item['name'] = site.xpath('a/text()').extract() item['url'] = site.xpath('a/@href').extract() item['description'] = site.xpath('text()').re('-\s[^\n]*\\r') items.append(item) return items </code></pre> <h2>3.5. 使用Item Pipeline</h2> <p>当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。<br> 每个item pipeline组件(有时称之为<code>ItemPipeline</code>)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。<br> 以下是item pipeline的一些典型应用:</p> <ul> <li>清理HTML数据</li> <li>验证爬取的数据(检查item包含某些字段)</li> <li>查重(并丢弃)</li> <li>将爬取结果保存,如保存到数据库、XML、JSON等文件中</li> </ul> <blockquote> <p>编写你自己的item pipeline很简单,每个item pipeline组件是一个独立的Python类,同时必须实现以下方法:</p> </blockquote> <pre><code class="python">process_item(item, spider) #每个item pipeline组件都需要调用该方法,这个方法必须返回一个 Item (或任何继承类)对象,或是抛出 DropItem异常,被丢弃的item将不会被之后的pipeline组件所处理。 #参数: item: 由 parse 方法返回的 Item 对象(Item对象) spider: 抓取到这个 Item 对象对应的爬虫对象(Spider对象) open_spider(spider) #当spider被开启时,这个方法被调用。 #参数: spider : (Spider object) – 被开启的spider    close_spider(spider) #当spider被关闭时,这个方法被调用,可以再爬虫关闭后进行相应的数据处理。 #参数: spider : (Spider object) – 被关闭的spider </code></pre> <blockquote> <p>为JSON文件编写一个items</p> </blockquote> <pre><code class="python">from scrapy.exceptions import DropItem class TutorialPipeline(object): # put all words in lowercase words_to_filter = ['politics', 'religion'] def process_item(self, item, spider): for word in self.words_to_filter: if word in unicode(item['description']).lower(): raise DropItem("Contains forbidden word: %s" % word) else: return item </code></pre> <p>在 settings.py 中设置<code>ITEM_PIPELINES</code>激活item pipeline,其默认为[]</p> <pre><code>ITEM_PIPELINES = {'tutorial.pipelines.FilterWordsPipeline': 1} </code></pre> <h2>3.6. 存储数据</h2> <p>使用下面的命令存储为<code>json</code>文件格式</p> <pre><code>scrapy crawl dmoz -o items.json </code></pre> <h1>4. Scarpy优化豆瓣爬虫的抓取</h1> <hr> <p>主要针对之间写过的豆瓣爬虫进行重构:</p> <ul> <li>Python网络爬虫(二)--豆瓣抓站小计</li> <li>豆瓣抓站重构第二版</li> </ul> <p>豆瓣有反爬虫机制, 只成功了一次后, 就被<code>baned</code>后显示403了, 下面说一下爬虫结构</p> <p>完整的豆瓣爬虫代码链接</p> <h2>4.1. Item</h2> <pre><code class="python">from scrapy.item import Item, Field class DoubanItem(Item): # define the fields for your item here like: # name = scrapy.Field() name = Field() #电影名称 description = Field() #电影描述 url = Field() #抓取的url </code></pre> <h2>4.2. Spider主程序</h2> <pre><code class="python">#!/usr/bin/env python # -*- coding:utf-8 -*- """ 一个简单的Python 爬虫, 用于抓取豆瓣电影Top前250的电影的名称描述等 Anthor: Andrew Liu Version: 0.0.3 Date: 2014-12-17 Language: Python2.7.8 Editor: Sublime Text2 Operate: 具体操作请看README.md介绍 """ from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.selector import Selector from douban.items import DoubanItem from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor class DoubanSpider(CrawlSpider) : name = "douban" allowed_domains = ["movie.douban.com"] start_urls = ["http://movie.douban.com/top250"] rules = ( #将所有符合正则表达式的url加入到抓取列表中 Rule(SgmlLinkExtractor(allow = (r'http://movie\.douban\.com/top250\?start=\d+&filter=&type=',))), #将所有符合正则表达式的url请求后下载网页代码, 形成response后调用自定义回调函数 Rule(SgmlLinkExtractor(allow = (r'http://movie\.douban\.com/subject/\d+', )), callback = 'parse_page', follow = True), ) def parse_page(self, response) : sel = Selector(response) item = DoubanItem() item['name'] = sel.xpath('//h1/span[@property="v:itemreviewed"]/text()').extract() item['description'] = sel.xpath('//div/span[@property="v:summary"]/text()').extract() item['url'] = response.url return item </code></pre> <h2>4.3. 未来要解决的问题</h2> <ul> <li>头部伪装</li> <li>表单提交</li> <li>编码转换</li> </ul> <blockquote> <p>豆瓣抓了一会儿, 还没等我兴奋就被禁掉了</p> </blockquote> <p>ban</p> <pre><code class="python">... 2014-12-17 22:02:17+0800 [douban] DEBUG: Crawled (403) <GET http://www.douban.com/misc/sorry?original-url=http%3A%2F%2Fmovie.douban.com%2Fsubject%2F2209573%2F%3Ffrom%3Dsubject-page> (referer: http://movie.douban.com/subject/1849031/) 2014-12-17 22:02:17+0800 [douban] DEBUG: Ignoring response <403 http://www.douban.com/misc/sorry?original-url=http%3A%2F%2Fmovie.douban.com%2Fsubject%2F2209573%2F%3Ffrom%3Dsubject-page>: HTTP status code is not handled or not allowed 2014-12-17 22:02:17+0800 [douban] DEBUG: Crawled (403) <GET http://www.douban.com/misc/sorry?original-url=http%3A%2F%2Fmovie.douban.com%2Fsubject%2F1849031%2Fcomments%3Fsort%3Dtime> (referer: http://movie.douban.com/subject/1849031/) ... </code></pre> <h1>5. 参考链接</h1> <hr> <ul> <li>Basic concepts</li> <li> What else? section in Scrapy at a glance </li> <li>Item Pipeline</li> <li>Scrapy Tutorial</li> <li>BeautifulSoup</li> <li>mechanize</li> <li>scrapy</li> <li>Selectors documentation</li> <li>scrapy 中文教程(爬cnbeta实例)</li> <li>dmoz</li> </ul> </article> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1183971489947426816"></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爬虫(六)--Scrapy框架学习)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1881787362334273536.htm" title="杨建:网站加速--服务器编写篇" target="_blank">杨建:网站加速--服务器编写篇</a> <span class="text-muted">黄传通</span> <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/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/buffer/1.htm">buffer</a><a class="tag" taget="_blank" href="/search/server/1.htm">server</a><a class="tag" taget="_blank" href="/search/tcp/1.htm">tcp</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div>杨建:网站加速--服务器编写篇(上)--提升性能的同时为你节约10倍以上成本From:http://blog.sina.com.cn/iyangjian一,如何节约CPU二,怎样使用内存三,减少磁盘I/O四,优化你的网卡五,调整内核参数六,衡量WebServer的性能指标七,NBAjs直播的发展历程八,新浪财经实时行情系统的历史遗留问题(7byte=10.68wRMB/year)---------</div> </li> <li><a href="/article/1881766686487539712.htm" title="零基础小白学习网络安全的必备指南!" target="_blank">零基础小白学习网络安全的必备指南!</a> <span class="text-muted">Stanford_1106</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E8%BF%90%E7%BB%B4/1.htm">网络运维</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%BE%AE%E4%BF%A1%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/1.htm">微信开放平台</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0/1.htm">微信公众平台</a><a class="tag" taget="_blank" href="/search/twitter/1.htm">twitter</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/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>成长路上不孤单【14后///计算机爱好者///持续分享所学///如有需要欢迎收藏转发///】今日分享关于网络安全方面的相关内容!关于【网络安全】目录:一、了解网络安全基础知识二、学习计算机和网络基础知识三、掌握网络安全技术四、使用网络安全工具五、实战操作六、了解法律法规与职业道德七、持续学习与提升网络安全对于现代社会的重要性不言而喻,它关乎到个人信息安全、企业机密保护乃至国家安全。然而,对于许多零</div> </li> <li><a href="/article/1881763783404220416.htm" title="python爬虫——pandas的简单使用" target="_blank">python爬虫——pandas的简单使用</a> <span class="text-muted">张謹礧</span> <a class="tag" taget="_blank" href="/search/python%E7%88%AC%E8%99%AB%2B%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">python爬虫+可视化</a><a class="tag" taget="_blank" href="/search/python%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">python网络爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pandas/1.htm">pandas</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a> <div>pandas作为爬虫中最重要的包之一,我们要想学好爬虫,就必须要深入了解pandas直接上代码importpandasaspdimportnumpyasnpdata=pd.DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],#如果不写列索引默认为0,1,2,3columns=['a','b','c','d'])print(d</div> </li> <li><a href="/article/1881757350260436992.htm" title="股票技术面——量价关系" target="_blank">股票技术面——量价关系</a> <span class="text-muted">disgare</span> <a class="tag" taget="_blank" href="/search/%E9%9D%9Eit/1.htm">非it</a><a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a> <div>股票技术面——量价关系量能基础量能分成成交量和成交金额量能是价格的验证量的验证方式有两种:一是趋势验证,二是突破验证量比:量要定性的看不要定量的看六种量形量形基础突破验证:基柱倍量伸缩后市看多基柱强化:双阴洗盘低位放量趋势认证:阳胜进,阴胜出。小倍阳,大胆入量价走势高位放量无量空跌/无量急跌无量上涨涨跌停时的量价关系宏观下的量价共振和背离量价战法涨停接力棒量能接力棒凹口淘金量,指的是一支股票的单位</div> </li> <li><a href="/article/1881755585817407488.htm" title="深度学习理论基础(七)Transformer编码器和解码器" target="_blank">深度学习理论基础(七)Transformer编码器和解码器</a> <span class="text-muted">小仇学长</span> <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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/transformer/1.htm">transformer</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/%E7%BC%96%E7%A0%81%E5%99%A8/1.htm">编码器</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E7%A0%81%E5%99%A8/1.htm">解码器</a> <div>学习目录:深度学习理论基础(一)Python及Torch基础篇深度学习理论基础(二)深度神经网络DNN深度学习理论基础(三)封装数据集及手写数字识别深度学习理论基础(四)Parser命令行参数模块深度学习理论基础(五)卷积神经网络CNN深度学习理论基础(六)Transformer多头自注意力机制深度学习理论基础(七)Transformer编码器和解码器本文目录学习目录:前述:Transformer</div> </li> <li><a href="/article/1881736288604844032.htm" title="用Python爬虫获取微博热搜词:数据抓取、分析与可视化全流程" target="_blank">用Python爬虫获取微博热搜词:数据抓取、分析与可视化全流程</a> <span class="text-muted">Python爬虫项目</span> <a class="tag" taget="_blank" href="/search/2025%E5%B9%B4%E7%88%AC%E8%99%AB%E5%AE%9E%E6%88%98%E9%A1%B9%E7%9B%AE/1.htm">2025年爬虫实战项目</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><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/selenium/1.htm">selenium</a> <div>引言微博作为中国最受欢迎的社交平台之一,每时每刻都在更新着海量的内容。其中,微博热搜词反映了用户关注的热点话题、社会事件及潮流趋势。对于数据分析、情感分析以及趋势预测等领域,获取微博热搜数据是一个非常有价值的任务。在本篇博客中,我们将详细介绍如何使用Python爬虫技术获取微博的热搜词,并进行数据分析和可视化。通过全流程的讲解,帮助你了解如何通过爬虫技术抓取并分析微博热搜词数据。一、爬虫技术概述与</div> </li> <li><a href="/article/1881730869715070976.htm" title="深入探究 Java 异常处理" target="_blank">深入探究 Java 异常处理</a> <span class="text-muted">潜意识Java</span> <a class="tag" taget="_blank" href="/search/Java%E7%9F%A5%E8%AF%86/1.htm">Java知识</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><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录一、异常是什么,为啥要处理它二、Java异常体系概述三、Java异常处理方式1.try-catch-finally块2.throws关键字3.throw关键字四、自定义异常五、异常处理的最佳实践六、总结在Java编程的旅程中,异常处理就像是一位默默守护的卫士,时刻保障着程序的稳健运行。当程序运行过程中出现错误或异常情况时,合理的异常处理机制能够避免程序崩溃,让程序以一种可控的方式继续执行或优雅</div> </li> <li><a href="/article/1881727090026409984.htm" title="自动化办公python脚本_Python自动化办公" target="_blank">自动化办公python脚本_Python自动化办公</a> <span class="text-muted">weixin_39834281</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E5%8A%9E%E5%85%ACpython%E8%84%9A%E6%9C%AC/1.htm">自动化办公python脚本</a> <div>在公司购买的OA系统上,很多功能都是软件商开发好的,如果有什么自定义的需求,也很难实现。现实情况下需要将一个工单的各类信息汇总整理为一份Excel,看似简单的需求,却需要在OA系统上反复点击多次,人工汇总。本章我们看看如何使用Python爬虫帮同事解决这个问题的。点击工单号之后才可以看到更多信息一、技术路线requests_html二、环境准备fromrequests_htmlimportHTML</div> </li> <li><a href="/article/1881720149438951424.htm" title="青少年编程与数学 02-007 PostgreSQL数据库应用 12课题、存储过程编写" target="_blank">青少年编程与数学 02-007 PostgreSQL数据库应用 12课题、存储过程编写</a> <span class="text-muted">明月看潮生</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B8%8E%E6%95%B0%E5%AD%A6/1.htm">编程与数学</a><a class="tag" taget="_blank" href="/search/%E7%AC%AC02%E9%98%B6%E6%AE%B5/1.htm">第02阶段</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/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a><a class="tag" taget="_blank" href="/search/postgresql/1.htm">postgresql</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B8%8E%E6%95%B0%E5%AD%A6/1.htm">编程与数学</a> <div>青少年编程与数学02-007PostgreSQL数据库应用12课题、存储过程编写一、存储过程二、分类三、创建四、调用五、修改六、删除七、应用示例八、内置存储过程课题摘要:本课题详细介绍了PostgreSQL中存储过程的编写和操作。存储过程是一系列SQL语句的集合,可作为单元保存在数据库中,用于执行数据查询、更新、插入和删除等操作。它们具有封装性、提高性能、增强安全性、事务管理、参数化和返回结果等特</div> </li> <li><a href="/article/1881715101778636800.htm" title="Python爬虫工具BeautifulSoup使用详解" target="_blank">Python爬虫工具BeautifulSoup使用详解</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/beautifulsoup/1.htm">beautifulsoup</a> <div>目录一、模块简介二、方法利用1、安装beautifulsoup2、引入模块3、选择解析器解析指定内容三、具体利用1、获取拥有指定属性的标签2、获取标签的属性值3、获取标签中的内容4、stripped_strings四、输出1、格式化输出prettify()2、get_text()一、模块简介BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换</div> </li> <li><a href="/article/1881702618313584640.htm" title="Python爬虫天气预报(小白入门)(1)" target="_blank">Python爬虫天气预报(小白入门)(1)</a> <span class="text-muted">2401_84009993</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</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><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>首先来到目标数据的网页http://www.weather.com.cn/weather40d/101280701.shtml中国天气网我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有部分页面刷新了,就是天气数据的那块,而URL没有变化。这是因为网页前端使用了JS异步加载的技术,更新时不用加载整个页面,从而提升了网页的加载速度。对于这种非静态页面,我们在请求数据时,就不</div> </li> <li><a href="/article/1881668045399715840.htm" title="Python从0到100(八十三):神经网络-使用残差网络RESNET识别手写数字" target="_blank">Python从0到100(八十三):神经网络-使用残差网络RESNET识别手写数字</a> <span class="text-muted">是Dream呀</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新</div> </li> <li><a href="/article/1881666655654834176.htm" title="解锁辅助驾驶新境界:基于昇腾 AI 异构计算架构 CANN 的应用探秘" target="_blank">解锁辅助驾驶新境界:基于昇腾 AI 异构计算架构 CANN 的应用探秘</a> <span class="text-muted">倔强的石头_</span> <a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</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%9E%B6%E6%9E%84/1.htm">架构</a> <div>博客主页:倔强的石头的CSDN主页Gitee主页:倔强的石头的gitee主页⏩文章专栏:《AI大模型》期待您的关注目录一、引言二、CANN是什么1.异构计算与人工智能的关系2.CANN的定义和作用3.CANN的技术优势三、基于CANN的辅助驾驶AI应用原理1.目标检测算法2.智能检测流程3.算力平台支持四、基于CANN的辅助驾驶AI优势1.高效训练2.精准检测3.快速编程4.产业应用五、部署实操六</div> </li> <li><a href="/article/1881638779215736832.htm" title="六种主流虚拟化技术全解析:OpenStack、KVM、Hyper-V、VMware、Xen及Docker" target="_blank">六种主流虚拟化技术全解析:OpenStack、KVM、Hyper-V、VMware、Xen及Docker</a> <span class="text-muted">律己杂谈</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E5%8F%91%E5%B1%95%E5%8F%B2%E5%8F%8A%E5%9F%BA%E7%A1%80/1.htm">计算机系统发展史及基础</a><a class="tag" taget="_blank" href="/search/openstack/1.htm">openstack</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/VMware/1.htm">VMware</a><a class="tag" taget="_blank" href="/search/Xen/1.htm">Xen</a><a class="tag" taget="_blank" href="/search/Hyper-V/1.htm">Hyper-V</a><a class="tag" taget="_blank" href="/search/KVM/1.htm">KVM</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a> <div>秒懂虚拟化(一):从概念到网络、存储虚拟化全解析,通俗解读版-CSDN博客秒懂虚拟化(二):服务器虚拟化、操作系统虚拟化、服务虚拟化全解析,通俗解读版_hostos和guestos-CSDN博客秒懂虚拟化(三):桌面拟化、用户体验虚拟化、应用程序虚拟化全解析,通俗解读版-CSDN博客秒懂虚拟化(四):虚拟化技术优劣、技术原理、CPU虚拟化和内存虚拟化全解析,通俗解读版-CSDN博客前面4篇文章详细</div> </li> <li><a href="/article/1881609901227175936.htm" title="Python 爬虫入门教程:从零构建你的第一个网络爬虫" target="_blank">Python 爬虫入门教程:从零构建你的第一个网络爬虫</a> <span class="text-muted">m0_74825223</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</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><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>网络爬虫是一种自动化程序,用于从网站抓取数据。Python凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习Python爬虫的基本知识,并实现一个简单的爬虫项目。1.什么是网络爬虫?网络爬虫(WebCrawler)是一种通过网络协议(如HTTP/HTTPS)获取网页内容,并提取其中有用信息的程序。常见的爬虫用途包括:收集商品价格和评价。抓取新闻或博客内容。统计数据分析。爬</div> </li> <li><a href="/article/1881609899138412544.htm" title="基于 Python 的机器学习模型部署到 Flask Web 应用:从训练到部署的完整指南" target="_blank">基于 Python 的机器学习模型部署到 Flask Web 应用:从训练到部署的完整指南</a> <span class="text-muted">m0_74825223</span> <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><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a> <div>目录引言技术栈步骤一:数据预处理步骤二:训练机器学习模型步骤三:创建FlaskWeb应用步骤四:测试Web应用步骤五:模型的保存与加载保存模型加载模型并在Flask中使用步骤六:Web应用的安全性考量示例:简单的输入验证示例:自定义错误处理示例:使用Flask-JWT-Extended进行认证结论参考资料引言在当今数据驱动的时代,机器学习模型已经广泛应用于各行各业,从金融、医疗到教育等领域。然而,</div> </li> <li><a href="/article/1881609139898085376.htm" title="《递归算法:原理剖析与典型例题精解》" target="_blank">《递归算法:原理剖析与典型例题精解》</a> <span class="text-muted">m0_dawn</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><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/%E8%93%9D%E6%A1%A5%E6%9D%AF/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/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>目录一、递归算法概述二、递归的时间复杂度三、递归与循环的区别(一)结构与实现方式(二)适用场景四、递归的优点(一)代码简洁易读(二)逻辑清晰直观(三)易于扩展和修改五、递归的缺点(一)空间复杂度高(二)效率低下(未优化时)(三)难以理解(复杂递归)六、循环的优点(一)空间复杂度低(二)效率高(简单迭代)(三)易于调试七、循环的缺点(一)代码复杂度高(复杂逻辑)(二)逻辑不够直观(三)难以扩展和修改</div> </li> <li><a href="/article/1881605987211735040.htm" title="第六篇 vue3 【toRefs 与 toRef】" target="_blank">第六篇 vue3 【toRefs 与 toRef】</a> <span class="text-muted">小画家~</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>import{ref,reactive,toRefs,toRef}from'vue'//数据letperson=reactive({name:'张三',age:18,gender:'男'})作用:将一个响应式对象中的每一个属性,转换为ref对象。备注:toRefs与toRef功能一致,但toRefs可以批量转换。let{name,gender}=toRefs(person)//取出一批数据的值//</div> </li> <li><a href="/article/1881600817811746816.htm" title="网络名称解析:IP,掩码(netmask),网关(gateway),DNS?" target="_blank">网络名称解析:IP,掩码(netmask),网关(gateway),DNS?</a> <span class="text-muted">章鱼丸仔</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>文章目录一、IP地址A、IP地址格式B、网络号码与主机号码C、广播地址、网段地址二、IP地址分配三、子网掩码四、CIDR什么是CIDR?CIDR表示法五、gateway默认网关六、dns-nameserve域名服务器一、IP地址每个IP地址都是由“网络号+主机号”两部分组成。IP地址管理机构在分配IP地址时,只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。IP地址由32位二进制数组成,</div> </li> <li><a href="/article/1881595641898004480.htm" title="数据结构(Java版)第二期:包装类和泛型" target="_blank">数据结构(Java版)第二期:包装类和泛型</a> <span class="text-muted">手握风云-</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%28Java%E7%89%88%29/1.htm">数据结构(Java版)</a><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/java/1.htm">java</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.2.装箱和拆箱1.3.自动装箱和自动拆箱二、泛型的概念三、引出泛型3.1.语法规则3.2.泛型的优点四、类型擦除4.1.擦除的机制五、泛型的上界5.1.泛型的上界的定义5.2.语法规则六、泛型方法6.1.定义语法6.2.交换方法的实例七、通配符包装类和泛型我们在Java语法中,我们在基本数据类型里面涉及过,但是我们在语法里面用不到,而在数据结构里面我</div> </li> <li><a href="/article/1881542043898015744.htm" title="SIWAVE+ADS提取PCB走线寄生参数" target="_blank">SIWAVE+ADS提取PCB走线寄生参数</a> <span class="text-muted">坐忘行</span> <a class="tag" taget="_blank" href="/search/%E4%BB%BF%E7%9C%9F/1.htm">仿真</a><a class="tag" taget="_blank" href="/search/%E5%B0%84%E9%A2%91%E5%B7%A5%E7%A8%8B/1.htm">射频工程</a> <div>第一章PCB参数提取与RF匹配调试仿真–软件及基础第二章CST仿真PCB操作说明第三章SIWAVE仿真PCB操作说明第四章Q3D提取PCB走线RLCG参数第五章CST仿真PCB射频通路间的隔离度第六章HFSS仿真PCB射频通路间的隔离度第七章HFSS3DLayout仿真PCB操作说明第八章SIWAVE+ADS提取PCB走线寄生参数————————————————前言前面介绍了Q3D仿真PCB走线寄</div> </li> <li><a href="/article/1881491069925912576.htm" title="如何用selenium来链接并打开比特浏览器进行自动化操作(1)" target="_blank">如何用selenium来链接并打开比特浏览器进行自动化操作(1)</a> <span class="text-muted">写python的鑫哥</span> <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E5%AE%9E%E6%88%98%E8%BF%9B%E9%98%B6/1.htm">爬虫实战进阶</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/pyppeteer/1.htm">pyppeteer</a><a class="tag" taget="_blank" href="/search/puppeteer/1.htm">puppeteer</a><a class="tag" taget="_blank" href="/search/%E6%AF%94%E7%89%B9%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">比特浏览器</a><a class="tag" taget="_blank" href="/search/%E6%AF%94%E7%89%B9%E6%8C%87%E7%BA%B9%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">比特指纹浏览器</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E6%8E%A5/1.htm">链接</a><a class="tag" taget="_blank" href="/search/%E6%89%93%E5%BC%80/1.htm">打开</a> <div>前言本文是该专栏的第76篇,后面会持续分享python爬虫干货知识,记得关注。本文,笔者将基于“比特浏览器”,通过selenium来实现链接并打开比特浏览器,进行相关的“自动化”操作。值得一提的是,在本专栏之前,笔者有详细介绍过“使用selenium或者pyppeteer(puppeteer)来链接并打开指纹浏览器AdsPower”的方法和详细教程。笔者将相关文章的链接,整理如下(对此领域,感兴趣</div> </li> <li><a href="/article/1881486653277663232.htm" title="STL--set(集合)" target="_blank">STL--set(集合)</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/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>目录前言set:multiset:一、set对象创建1、默认构造2、初始化列表3、迭代器4、拷贝构造二、set赋值操作1、=set对象2、=初始化列表三、set大小操作1、判空2、大小四、set数据插入1、单值插入2、多值插入五、set数据查找六、set数据删除1、s.erase(x);删除x2、s.erase(迭代器);删除迭代器所在位置的值3、s.erase(迭代器1,迭代器2);七、set数</div> </li> <li><a href="/article/1881486526953615360.htm" title="STL--vector(二)" target="_blank">STL--vector(二)</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录一、vector数值插入1、尾插:v.push_back(x)2、在迭代器之前插入二、vector数据删除1、删除最后元素2、删除任意元素3、清空所有元素三、vector扩容机制调整vector:四、vector随机访问五、vector内存交换应用1:缩容应用2:内存清理六、vector空间预留七、vector高效删除八、vector数据排序一、vector数值插入1、尾插:v.push_ba</div> </li> <li><a href="/article/1881479844978552832.htm" title="day_03_查找算法、排序算法" target="_blank">day_03_查找算法、排序算法</a> <span class="text-muted">幻影maple</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E6%89%BE%E7%AE%97%E6%B3%95/1.htm">查找算法</a><a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a> <div>六算法的概念和评价1基本概念2评定标准3描述方式七常用的查找算法1线性查找算法顺序查找算法1算法流程2算法评价2二分查找算法折半查找算法1算法流程2算法评价八常用的排序算法1冒泡排序算法1算法流程2算法评价2插入排序算法1算法流程2算法评价3选择排序算法1算法流程2算法评价4快速排序算法1算法流程2算法评价六、算法的概念和评价1、基本概念算法就是指对解题方案准确而又完整的描述,是一系列解决问题的清</div> </li> <li><a href="/article/1881472398792912896.htm" title="React Native 介绍" target="_blank">React Native 介绍</a> <span class="text-muted">王睿丶</span> <a class="tag" taget="_blank" href="/search/%E8%B5%84%E8%AE%AF%E7%9C%8B%E7%82%B9/1.htm">资讯看点</a><a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/Native/1.htm">Native</a><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/%E8%B7%A8%E5%B9%B3%E5%8F%B0/1.htm">跨平台</a><a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/%E7%8E%8B%E7%9D%BF%E4%B8%B6/1.htm">王睿丶</a> <div>文章目录一丶ReactNative惊喜二丶ReactNative简介三丶ReactNative特性四丶ReactNative优点五丶ReactNative局限性六丶构建最简单的应用七丶学习资料一丶ReactNative惊喜ReactNative是一个使用JavaScript和React来编写跨终端移动应用(Android或IOS)的一种解决方案这句话是什么意思呢?即使你不懂如何使用Java或Kot</div> </li> <li><a href="/article/1881423451332341760.htm" title="Markdown学习笔记" target="_blank">Markdown学习笔记</a> <span class="text-muted">exm-zem</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>Markdown学习笔记——你好世界Markdown标题Markdown标题的两种格式:1、使用=和-来建立一个一级和二级标题:一级标题=================二级标题-----------------我展示的是一级标题我展示的是二级标题2、使用#号可以标记1-6级标题:#一级标题##二级标题###三级标题####四级标题#####五级标题######六级标题一级标题二级标题三级标题四级</div> </li> <li><a href="/article/1881411196955979776.htm" title="基于Python爬虫的豆瓣电影影评数据可视化分析" target="_blank">基于Python爬虫的豆瓣电影影评数据可视化分析</a> <span class="text-muted">wp_tao</span> <a class="tag" taget="_blank" href="/search/Python%E5%89%AF%E4%B8%9A%E6%8E%A5%E5%8D%95%E5%AE%9E%E6%88%98%E9%A1%B9%E7%9B%AE/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><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>文章目录前言一、数据抓取二、数据可视化1.绘制词云图2.读入数据总结前言本文以电影《你好,李焕英》在豆瓣上的影评数据为爬取和分析的目标,利用python爬虫技术对影评数据进行了爬取,使用pandas库进行了数据清洗,使用jieba库进行分词,使用collections库进行词频统计,使用wordcloud库绘制词云图,使用matplotlib库绘制了评论人所在城市占比饼状图,并使用matplotl</div> </li> <li><a href="/article/1881371328380989440.htm" title="深度学习乐园智能零售柜商品识别" target="_blank">深度学习乐园智能零售柜商品识别</a> <span class="text-muted">Java先进事迹</span> <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/%E9%9B%B6%E5%94%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> <div>1.项目简介本项目专注于智能零售柜商品识别,是为第六届信也科技杯图像算法大赛设计的方案。其核心目标是利用深度学习技术,实现对顾客选购商品的精准识别和自动化结算。当商品被放置在指定区域时,系统应自动检测并识别每件商品,生成购物清单并计算总价格,提升零售柜的自动化与便利性。此类智能系统在不需要售货员的情况下即可进行商品识别和结算,相较于传统的硬件分隔、重量判断、顾客行为监测、或射频识别技术,这种方法不</div> </li> <li><a href="/article/1881356843675086848.htm" title="BOE(京东方)"向新2025”年终媒体智享会落地深圳 "屏”实力赋能产业创新发展" target="_blank">BOE(京东方)"向新2025”年终媒体智享会落地深圳 "屏”实力赋能产业创新发展</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>12月27日,BOE(京东方)“向新2025”年终媒体智享会的收官之站在创新之都深圳圆满举行,为这场为期两周、横跨三地的年度科技盛会画上了完美句号。活动期间,全面回顾了BOE(京东方)2024年在多个关键领域取得的卓越成绩,深入剖析其在六大维度构建的“向新”发展格局,精彩呈现了以“屏”为核心搭建起的技术引领、伙伴赋能以及绿色发展等平台,全方位赋能全球生态合作伙伴,充分彰显BOE(京东方)作为全球领</div> </li> <li><a href="/article/112.htm" title="HQL之投影查询" target="_blank">HQL之投影查询</a> <span class="text-muted">归来朝歌</span> <a class="tag" taget="_blank" href="/search/HQL/1.htm">HQL</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E8%AF%A2%E8%AF%AD%E5%8F%A5/1.htm">查询语句</a><a class="tag" taget="_blank" href="/search/%E6%8A%95%E5%BD%B1%E6%9F%A5%E8%AF%A2/1.htm">投影查询</a> <div>        在HQL查询中,常常面临这样一个场景,对于多表查询,是要将一个表的对象查出来还是要只需要每个表中的几个字段,最后放在一起显示? 针对上面的场景,如果需要将一个对象查出来: HQL语句写“from 对象”即可 Session session = HibernateUtil.openSession(); </div> </li> <li><a href="/article/239.htm" title="Spring整合redis" target="_blank">Spring整合redis</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>pom.xml <dependencies> <!-- Spring Data - Redis Library --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redi</div> </li> <li><a href="/article/366.htm" title="org.hibernate.NonUniqueResultException: query did not return a unique result: 2" target="_blank">org.hibernate.NonUniqueResultException: query did not return a unique result: 2</a> <span class="text-muted">0624chenhong</span> <a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>参考:http://blog.csdn.net/qingfeilee/article/details/7052736 org.hibernate.NonUniqueResultException: query did not return a unique result: 2         在项目中出现了org.hiber</div> </li> <li><a href="/article/493.htm" title="android动画效果" target="_blank">android动画效果</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/android%E5%8A%A8%E7%94%BB/1.htm">android动画</a> <div>前几天弄alertdialog和popupwindow的时候,用到了android的动画效果,今天专门研究了一下关于android的动画效果,列出来,方便以后使用。 Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。 </div> </li> <li><a href="/article/620.htm" title="js delete 删除机理以及它的内存泄露问题的解决方案" target="_blank">js delete 删除机理以及它的内存泄露问题的解决方案</a> <span class="text-muted">换个号韩国红果果</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>delete删除属性时只是解除了属性与对象的绑定,故当属性值为一个对象时,删除时会造成内存泄露  (其实还未删除) 举例: var person={name:{firstname:'bob'}} var p=person.name delete person.name p.firstname -->'bob' // 依然可以访问p.firstname,存在内存泄露</div> </li> <li><a href="/article/747.htm" title="Oracle将零干预分析加入网络即服务计划" target="_blank">Oracle将零干预分析加入网络即服务计划</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>由Oracle通信技术部门主导的演示项目并没有在本月较早前法国南斯举行的行业集团TM论坛大会中获得嘉奖。但是,Oracle通信官员解雇致力于打造一个支持零干预分配和编制功能的网络即服务(NaaS)平台,帮助企业以更灵活和更适合云的方式实现通信服务提供商(CSP)的连接产品。这个Oracle主导的项目属于TM Forum Live!活动上展示的Catalyst计划的19个项目之一。Catalyst计</div> </li> <li><a href="/article/874.htm" title="spring学习——springmvc(二)" target="_blank">spring学习——springmvc(二)</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a> <div>Spring MVC提供了非常方便的文件上传功能。 1,配置Spring支持文件上传: DispatcherServlet本身并不知道如何处理multipart的表单数据,需要一个multipart解析器把POST请求的multipart数据中抽取出来,这样DispatcherServlet就能将其传递给我们的控制器了。为了在Spring中注册multipart解析器,需要声明一个实现了Mul</div> </li> <li><a href="/article/1001.htm" title="POJ-2828-Buy Tickets" target="_blank">POJ-2828-Buy Tickets</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/ACM_POJ/1.htm">ACM_POJ</a> <div>POJ-2828-Buy Tickets http://poj.org/problem?id=2828 线段树,逆序插入 #include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;#define N 200010struct</div> </li> <li><a href="/article/1128.htm" title="Java Ant build.xml详解" target="_blank">Java Ant build.xml详解</a> <span class="text-muted">asia007</span> <a class="tag" taget="_blank" href="/search/build.xml/1.htm">build.xml</a> <div>1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台   --因为ant是使用java实现的,所以它跨平台使用简单--与ant的兄弟make比起来语法清晰--同样是和make相比功能强大--ant能做的事情很多,可能你用了很久,你仍然不知道它能有</div> </li> <li><a href="/article/1255.htm" title="android按钮监听器的四种技术" target="_blank">android按钮监听器的四种技术</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/xml%E9%85%8D%E7%BD%AE/1.htm">xml配置</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E5%90%AC%E5%99%A8/1.htm">监听器</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E7%8E%B0%E6%8E%A5%E5%8F%A3/1.htm">实现接口</a> <div>android开发中经常会用到各种各样的监听器,android监听器的写法与java又有不同的地方;    1,activity中使用内部类实现接口 ,创建内部类实例  使用add方法  与java类似   创建监听器的实例 myLis lis = new myLis();   使用add方法给按钮添加监听器  </div> </li> <li><a href="/article/1382.htm" title="软件架构师不等同于资深程序员" target="_blank">软件架构师不等同于资深程序员</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E5%B8%88/1.htm">架构师</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a> <div>        本文的作者Armel Nene是ETAPIX Global公司的首席架构师,他居住在伦敦,他参与过的开源项目包括 Apache Lucene,,Apache Nutch, Liferay 和 Pentaho等。         如今很多的公司</div> </li> <li><a href="/article/1509.htm" title="TeamForge Wiki Syntax & CollabNet User Information Center" target="_blank">TeamForge Wiki Syntax & CollabNet User Information Center</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/TeamForge/1.htm">TeamForge</a><a class="tag" taget="_blank" href="/search/How+do/1.htm">How do</a><a class="tag" taget="_blank" href="/search/Attachement/1.htm">Attachement</a><a class="tag" taget="_blank" href="/search/Anchor/1.htm">Anchor</a><a class="tag" taget="_blank" href="/search/Wiki+Syntax/1.htm">Wiki Syntax</a> <div>the CollabNet user information center http://help.collab.net/   How do I create a new Wiki page? A CollabNet TeamForge project can have any number of Wiki pages. All Wiki pages are linked, and</div> </li> <li><a href="/article/1636.htm" title="【Redis四】Redis数据类型" target="_blank">【Redis四】Redis数据类型</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>概述 Redis是一个高性能的数据结构服务器,称之为数据结构服务器的原因是,它提供了丰富的数据类型以满足不同的应用场景,本文对Redis的数据类型以及对这些类型可能的操作进行总结。 Redis常用的数据类型包括string、set、list、hash以及sorted set.Redis本身是K/V系统,这里的数据类型指的是value的类型,而不是key的类型,key的类型只有一种即string</div> </li> <li><a href="/article/1763.htm" title="SSH2整合-附源码" target="_blank">SSH2整合-附源码</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a> <div>今天用eclipse终于整合出了struts2+hibernate+spring框架。 我创建的是tomcat项目,需要有tomcat插件。导入项目以后,鼠标右键选择属性,然后再找到“tomcat”项,勾选一下“Is a tomcat project”即可。具体方法见源码里的jsp图片,sql也在源码里。     补充1:项目中部分jar包不是最新版的,可能导</div> </li> <li><a href="/article/1890.htm" title="[转]开源项目代码的学习方法" target="_blank">[转]开源项目代码的学习方法</a> <span class="text-muted">braveCS</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/1.htm">学习方法</a> <div>转自: http://blog.sina.com.cn/s/blog_693458530100lk5m.html http://www.cnblogs.com/west-link/archive/2011/06/07/2074466.html   1)阅读features。以此来搞清楚该项目有哪些特性2)思考。想想如果自己来做有这些features的项目该如何构架3)下载并安装d</div> </li> <li><a href="/article/2017.htm" title="编程之美-子数组的最大和(二维)" target="_blank">编程之美-子数组的最大和(二维)</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div>package beautyOfCoding; import java.util.Arrays; import java.util.Random; public class MaxSubArraySum2 { /** * 编程之美 子数组之和的最大值(二维) */ private static final int ROW = 5; private stat</div> </li> <li><a href="/article/2144.htm" title="读书笔记-3" target="_blank">读书笔记-3</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/jquery%E7%AC%94%E8%AE%B0/1.htm">jquery笔记</a><a class="tag" taget="_blank" href="/search/resultMap%E9%85%8D%E7%BD%AE/1.htm">resultMap配置</a><a class="tag" taget="_blank" href="/search/ibatis%E4%B8%80%E5%AF%B9%E5%A4%9A%E9%85%8D%E7%BD%AE/1.htm">ibatis一对多配置</a> <div>1、resultMap配置 2、ibatis一对多配置 3、jquery笔记 1、resultMap配置 当<select resultMap="topic_data"> <resultMap id="topic_data">必须一一对应。 (1)<resultMap class="tblTopic&q</div> </li> <li><a href="/article/2271.htm" title="[物理与天文]物理学新进展" target="_blank">[物理与天文]物理学新进展</a> <span class="text-muted">comsci</span> <div>       如果我们必须获得某种地球上没有的矿石,才能够进行某些能量输出装置的设计和建造,而要获得这种矿石,又必须首先进行深空探测,而要进行深空探测,又必须获得这种能量输出装置,这个矛盾的循环,会导致地球联盟在与宇宙文明建立关系的时候,陷入困境       怎么办呢?  </div> </li> <li><a href="/article/2398.htm" title="Oracle 11g新特性:Automatic Diagnostic Repository" target="_blank">Oracle 11g新特性:Automatic Diagnostic Repository</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/ADR/1.htm">ADR</a> <div>Oracle Database 11g的FDI(Fault Diagnosability Infrastructure)是自动化诊断方面的又一增强。 FDI的一个关键组件是自动诊断库(Automatic Diagnostic Repository-ADR)。 在oracle 11g中,alert文件的信息是以xml的文件格式存在的,另外提供了普通文本格式的alert文件。 这两份log文</div> </li> <li><a href="/article/2525.htm" title="简单排序:选择排序" target="_blank">简单排序:选择排序</a> <span class="text-muted">dieslrae</span> <a class="tag" taget="_blank" href="/search/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F/1.htm">选择排序</a> <div> public void selectSort(int[] array){ int select; for(int i=0;i<array.length;i++){ select = i; for(int k=i+1;k<array.leng</div> </li> <li><a href="/article/2652.htm" title="C语言学习六指针的经典程序,互换两个数字" target="_blank">C语言学习六指针的经典程序,互换两个数字</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a> <div>示例程序,swap_1和swap_2都是错误的,推理从1开始推到2,2没完成,推到3就完成了 # include <stdio.h> void swap_1(int, int); void swap_2(int *, int *); void swap_3(int *, int *); int main(void) { int a = 3; int b = </div> </li> <li><a href="/article/2779.htm" title="php 5.4中php-fpm 的重启、终止操作命令" target="_blank">php 5.4中php-fpm 的重启、终止操作命令</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a> <div>php 5.4中php-fpm 的重启、终止操作命令: 查看php运行目录命令:which php/usr/bin/php 查看php-fpm进程数:ps aux | grep -c php-fpm 查看运行内存/usr/bin/php  -i|grep mem 重启php-fpm/etc/init.d/php-fpm restart 在phpinfo()输出内容可以看到php</div> </li> <li><a href="/article/2906.htm" title="线程同步工具类" target="_blank">线程同步工具类</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/%E5%90%8C%E6%AD%A5%E5%B7%A5%E5%85%B7%E7%B1%BB/1.htm">同步工具类</a> <div>同步工具类包括信号量(Semaphore)、栅栏(barrier)、闭锁(CountDownLatch)   闭锁(CountDownLatch) public class RunMain { public long timeTasks(int nThreads, final Runnable task) throws InterruptedException { fin</div> </li> <li><a href="/article/3033.htm" title="bleeding edge是什么意思" target="_blank">bleeding edge是什么意思</a> <span class="text-muted">haojinghua</span> <a class="tag" taget="_blank" href="/search/DI/1.htm">DI</a> <div>不止一次,看到很多讲技术的文章里面出现过这个词语。今天终于弄懂了——通过朋友给的浏览软件,上了wiki。  我再一次感到,没有辞典能像WiKi一样,给出这样体贴人心、一清二楚的解释了。为了表达我对WiKi的喜爱,只好在此一一中英对照,给大家上次课。   In computer science, bleeding edge is a term that </div> </li> <li><a href="/article/3160.htm" title="c中实现utf8和gbk的互转" target="_blank">c中实现utf8和gbk的互转</a> <span class="text-muted">jimmee</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/iconv/1.htm">iconv</a><a class="tag" taget="_blank" href="/search/utf8%26gbk%E7%BC%96%E7%A0%81/1.htm">utf8&gbk编码</a> <div>#include <iconv.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> int code_c</div> </li> <li><a href="/article/3287.htm" title="大型分布式网站架构设计与实践" target="_blank">大型分布式网站架构设计与实践</a> <span class="text-muted">lilin530</span> <a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a> <div>1.大型网站软件系统的特点? a.高并发,大流量。 b.高可用。 c.海量数据。 d.用户分布广泛,网络情况复杂。 e.安全环境恶劣。 f.需求快速变更,发布频繁。 g.渐进式发展。 2.大型网站架构演化发展历程? a.初始阶段的网站架构。 应用程序,数据库,文件等所有的资源都在一台服务器上。 b.应用服务器和数据服务器分离。 c.使用缓存改善网站性能。 d.使用应用</div> </li> <li><a href="/article/3414.htm" title="在代码中获取Android theme中的attr属性值" target="_blank">在代码中获取Android theme中的attr属性值</a> <span class="text-muted">OliveExcel</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/theme/1.htm">theme</a> <div>Android的Theme是由各种attr组合而成, 每个attr对应了这个属性的一个引用, 这个引用又可以是各种东西.   在某些情况下, 我们需要获取非自定义的主题下某个属性的内容 (比如拿到系统默认的配色colorAccent), 操作方式举例一则: int defaultColor = 0xFF000000; int[] attrsArray = { andorid.r.</div> </li> <li><a href="/article/3541.htm" title="基于Zookeeper的分布式共享锁" target="_blank">基于Zookeeper的分布式共享锁</a> <span class="text-muted">roadrunners</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E5%85%B1%E4%BA%AB%E9%94%81/1.htm">共享锁</a> <div>首先,说说我们的场景,订单服务是做成集群的,当两个以上结点同时收到一个相同订单的创建指令,这时并发就产生了,系统就会重复创建订单。等等......场景。这时,分布式共享锁就闪亮登场了。   共享锁在同一个进程中是很容易实现的,但在跨进程或者在不同Server之间就不好实现了。Zookeeper就很容易实现。具体的实现原理官网和其它网站也有翻译,这里就不在赘述了。   官</div> </li> <li><a href="/article/3668.htm" title="两个容易被忽略的MySQL知识" target="_blank">两个容易被忽略的MySQL知识</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1、varchar(5)可以存储多少个汉字,多少个字母数字?   相信有好多人应该跟我一样,对这个已经很熟悉了,根据经验我们能很快的做出决定,比如说用varchar(200)去存储url等等,但是,即使你用了很多次也很熟悉了,也有可能对上面的问题做出错误的回答。   这个问题我查了好多资料,有的人说是可以存储5个字符,2.5个汉字(每个汉字占用两个字节的话),有的人说这个要区分版本,5.0</div> </li> <li><a href="/article/3795.htm" title="zoj 3827 Information Entropy(水题)" target="_blank">zoj 3827 Information Entropy(水题)</a> <span class="text-muted">阿尔萨斯</span> <a class="tag" taget="_blank" href="/search/format/1.htm">format</a> <div> 题目链接:zoj 3827 Information Entropy 题目大意:三种底,计算和。 解题思路:调用库函数就可以直接算了,不过要注意Pi = 0的时候,不过它题目里居然也讲了。。。limp→0+plogb(p)=0,因为p是logp的高阶。 #include <cstdio> #include <cstring> #include <cmath&</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>