Python-scrapy爬虫

scrapy框架爬虫

  • scrapy框架爬虫简介
    • 安装scrapy
    • 建立scrapy项目
    • 入口函数与入口地址
    • Python的yield语句
  • Scrapy中查找HTML元素
    • Scrapy中查找HTML元素(1)
    • Scrapy中查找HTML元素(2)
    • Scrapy中查找HTML元素(3)
  • Scrapy爬取与存储数据
    • 建立Web网站
    • 编写数据项目类
    • 编写爬虫程序myspider
    • 编写数据管道处理类
    • 设置scrapy的配置文件
    • 运行
  • 编写Scrapy爬虫程序
    • 建立Web网站
    • 编写scrapy爬虫程序

scrapy框架爬虫简介

安装scrapy

windows系统在命令行模式下输入pip install scrapy命令即可。

建立scrapy项目

  1. 进入命令行窗体,在D盘中建立一个文件夹,例如example,进入d:\example然后执行命令:scrapy startproject demo,该命令建立一个名称为demo的scrapy项目。
  2. scrapy项目建立后会在d:\demo中建立demo文件夹,同时下面还有另外一个demo子文件夹,有一些必要的项目文件。
  3. 为了测试这个scrapy项目,先建立一个web网站,可以在d:\example中建立一个server.py程序,如下:
import flask

app=flask.Flask(__name__)
@app.route("/")
def index():
	return "测试scrapy"
if __name__ == "__main__":
	app.run()
  1. 在d:\example\demo\demo\spider文件夹中建立一个自己的python文件,例如MySpider.py,程序如下:
import scrapy

class MySpider(scrapy.Spider):
	name="mySpider"
	
	def start_request(self):
		url = "http://127.0.0.1:5000"
		yield scrapy.Request(url=url,callback=self.parse)
	def parse(self,response):
		print(response.url)
		data=response.body.decode()
		print(data)
  1. 在d:\example\demo\demo文件夹中建立一个执行程序如run.py,程序如下:
from scrapy import cmdline
cmdline.execute("scrapy crawl mySpider -s LOG_ENABLED=False".split())
  1. 保存这些程序并运行run.py,可以看到结果:
http://127.0.0.1:5000
测试scrapy

由此可见程序MySpider.py是访问了我们自己的Web网站并爬取了网站的网页。下面来分析这个程序:
(1). import scrapy 引入scrapy程序包,这个包中有一个请求对象Request与一个响应对象Response类。
(2).

class MySpider(scrapy.Spider): 
	name = "mySpider"

任何一个爬虫程序类都继承与scrapy.Spider类,任何一个爬虫程序都有一个名字,这个名字在整个爬虫项目是唯一的,此项目中的爬虫名字为“mySpider”。
(3)

def start_request(self):
	url = "http://127.0.0.1:5000"
	yield scrapy.Request(url=url,callback=self.parse)

这个地址url是爬虫程序的入口地址,这个start_request函数是程序的入口函数。程序开始时确定要爬取的网站地址,然后建立一个scrapy.Request请求类,向这个类提供url参数,指明要爬取的网页地址。爬取网页完成后就执行默认的回调函数parse。
scrapy的执行过程是异步进行的,即指定一个url网址开始爬取数据时,程序不用一直等待这个网站的响应,如果网站迟迟不响应,那么整个程序就卡死了。但是scrapy提供一个回调函数,网站什么时候响应就什么时候调用这个回调函数,这样有利于对响应时间很长的网站的爬取。
(4)

def parse(self,response):
	print(response.url)
	data=response.body.decode()
	print(data)

回调函数parse包含一个scrapy.Request类的对象response,它是网站响应的一切信息,其中response.url就是网站的网址,response.body是网站响应的二进制数据,即网页的内容。通过decode()解码后变成字符串,就可以用print输出了。
(5) run.py的作用
程序MySpider.py只是一个类,不能单独执行,要执行这个爬虫程序就必须使用scrapy中专门的命令scrapy crawl。可以在命令窗口,在d:\example\demo\demo中执行命令:scrapy crawl mySpider -s LOG_ENABLED=False,那么就可以看到执行后的结果。注:其中mySpider指爬虫程序的名称,后面的参数是不现实调试信息。但是由于窗口的切换比较繁琐,因此设计一个python的run.py,专门用来执行MySpider.py程序。

入口函数与入口地址

在程序中使用了入口函数:

def start_request(self):
	url = "http://127.0.0.1:5000"
	yield scrapy.Request(url=url,callback=self.parse)

实际上这个函数可以用start_urls的入口地址来代替:

start_urls = "http://127.0.0.1:5000"

入口地址可有多个,因此start_urls是一个列表。入口函数与入口地址的作用是一样的。

Python的yield语句

  • 在入口函数,有一条yield语句,主要作用是返回一个值等待被取走。
  • 实例:
def fun():
	s = ['a','b','c']
	for x in s:
		yield x
		print("fun End")
f = fun()
print(f)
for e in f:
	print(e)

程序结果:


a
b
c
fun End

由此可见,fun返回一个generator的对象,这种对象包含一系列的元素,可以使用for循环提取,执行循环的过程如下:

for e in f:
	print(e)
  • 第一次 for e in f 循环,f执行到yield语句,就返回一个值’a’,for循环从f抽取的元素是’a’,然后e=‘a’,打印a。fun中执行到yield时会等待yield返回的值被抽走,同时fun停留在yield语句,一旦被抽走,再次循环,yield返回’b’。
  • 第二次循环 for e in f 循环,抽取f函数的’b’元素,打印出’b’,然后f中循环继续yield返回’c’元素。
  • 第三次循环 for e in f 循环,抽取f函数的’c元素,打印出’c’,然后f中循环就结束了,显示fun End,随后for e in f循环中f也没有元素可以继续抽走了,也结束,随后程序结束。
  • 只要包含yield语句的函数都返回一个generator的可循环对象,执行到yield语句时只是返回一个值,等待调用循环抽取,一旦调用循环抽取后,函数又继续进行。这个过程非常类似两个线程的协助过程,当提供数据的一方准备好数据把yield提交数据时,就等待另外一方把数据抽取走,如果不抽走yield就一直等待,一旦抽走后数据提供方继续它的程序,一直等到出现下一次yield或者程序结束。scrapy的框架使用的是异步执行的过程,因此大量使用yield语句。

Scrapy中查找HTML元素

Scrapy中查找HTML元素(1)

  • 在scrapy中有强大的查找HTML元素的功能,那就是使用xpath方法。xpath方法使用xPath语法,比BeautifulSoup的select要灵活而且速度快。
  • 使用xpath查找HTML中的元素
#从scrapy中引入Selector类,这个类就是选择查找类
from scrapy.selector import Selector
htmlText='''



	Harry Potter
	29.99


	Learning XML
	39.99



'''
selector=Selector(text=htmlText)  
#查看selector的类型
print(type(selector))
print(selector)
#在文档中查找所有的元素,其中“//”表示文档中的任何位置。
s=selector.xpath("//title")
print(type(s))
print(s)
</code></pre> 
  <p>程序结果:</p> 
  <pre><code><class 'scrapy.selector.unified.Selector'>
<Selector xpath=None data=u'<html><body>\n<bookstore>\n<book>\n\t<title '>
<class 'scrapy.selector.unified.SelectorList'>
[<Selector xpath='//title' data=u'<title lang="eng">Harry Potter'>, Learning XML'>]

(1).selector=Selector(text=htmlText) 使用htmlText的文字建立Selector类,就是装载HTML文档,文档装载后就形成一个Selector对象,就可以使用xpath查找元素。
(2). selector.xpath("//tagName")表示在文档中搜索的tags,形成一个Selector的列表。

  • 由此可见一般selector搜索一个的HTML元素的方法是:

    selector.xpath("//tagName")

  • 在装载HTML文档后selector=Selector(text=htmlText)得到的selector是对应全文档顶层的元素的,其中"//"表示全文档搜索,结果是一个Selector的列表,哪怕只有一个元素也成一个列表。

  • selector.xpath("//body")搜索到元素,结果是一个Selector的列表,包含一个Selector元素;

  • selector.xpath("//title")搜索到两个</code>元素,结果是Selector的列表,包含2个Selector元素;</p> </li> <li> <p><code>selector.xpath("//book")</code>搜索到两个元素,结果是Selector的列表,包含2个Selector元素;</p> </li> </ul> <h2>Scrapy中查找HTML元素(2)</h2> <ul> <li>使用“//”表示文档下面的所有节点元素,用“/”表示当前节点的下一级节点元素。</li> <li>“//”与“/”的使用</li> </ul> <ol> <li><code>selector.xpath("//bookstore/book")</code> 搜索<code><bookstore></code>下一级的<code><book></code>元素,找到2个;</li> <li><code>selector.xpath("//body/book")</code> 搜索<code><body></code>的下一级<code><book></code>元素,结果为空;</li> <li><code>selector.xpath("//body//book")</code> 搜索<code><body></code>下的<code><book></code>元素,找到2个;</li> <li><code>selector.xpath("/body//book")</code> 搜索文档下一级的<code><body></code>下的<code><book></code>元素,找结果为空,因为文档的下一级是<code><html></code>元素,而不是<code><body></code>;</li> <li><code>selector.xpath("/html/body//book")</code> 或者<code>selector.xpath("/html//book")</code> 搜索<code><book></code>元素,找到2个;</li> <li><code>selector.xpath("//book/title")</code> 搜索文档中所有<code><book></code>下一级的<code><title></code>元素,找到2个,结果跟<code>selector.xpath("//title")</code> 、<code>selector.xpath("//bookstore//title")</code>一样;</li> <li><code>selector.xpath("//book//price")</code>与<code>selector.xpath("//price")</code>结果一样,都是找到2个<code><price></code>元素。</li> </ol> <ul> <li>使用"."表示当前节点元素,使用xpath可以连续调用,如果前一个xpath返回一个Selector的列表,那么这个列表可以继续调用xpath,功能是为每个列表元素调用xpath,最后结果是全部元素调用xpath的汇总。</li> <li>使用"."进行xpath连续调用</li> </ul> <pre><code>from scrapy.selector import Selector htmlText=''' <html><body> <bookstore> <book> <title>Novel Harry Potter 29.99 TextBook Learning XML 39.99 ''' selector=Selector(text=htmlText) s=selector.xpath("//book").xpath("./title") for e in s: print(e)

    程序结果:

    Novel'>
    Harry Potter'>
    TextBook'>
    Learning XML'>
    
    • selector.xpath("//book")首先搜索到文档中所有元素,总共有2个,然后再次调用xpath("./title"),就是从当前元素开始往下一级搜索</code>,每个<code><book></code>都找到2个<code><title></code>,因此结果有4个<code><title></code>。</li> <li>注意如果<code>xpath</code>连续调用时不指定是从前一个<code>xpath</code>的结果元素开始的,那么默认是从全文档开始的,结果就会不一样,例如:<code>s=selector.xpath("//book").xpath("/title")</code> 结果就是空的,因为后面的<code>xpath("/title")</code>从文档开始搜索<code><title></code>。<code>s=selector.xpath("//book").xpath("//title")</code>结果有10个元素,因为每个<code><book></code>都驱动<code>xpath<"//title"></code>在全文档搜索<code><title></code>元素,每次都搜索到5个元素。</li> </ul> <h2>Scrapy中查找HTML元素(3)</h2> <ul> <li> <p>如果xpath返回的是一个Selector对象列表:</p> <ul> <li>调用extract()函数会得到这些对象的元素文本的列表</li> <li>使用extract_first()获取列表中第一个元素值,如果列表为空,extract_first()的值为None。</li> </ul> </li> <li> <p>xpath返回的是一个单一的Selector对象:</p> <ul> <li>调用extract()函数就可以得到Selector对象对应的元素的文本值。</li> <li>单一的Selector对象没有extract_first()函数。</li> </ul> </li> </ul> <pre><code>from scrapy.selector import Selector htmlText=''' <html> <body> <bookstore> <book id="b1"> <title lang="english">Harry Potter 29.99 learning-XML 39.98 ''' selector=Selector(text=htmlText) s=selector.xpath("//book/price") print(type(s),s) s=selector.xpath("//book/price").extract() print(type(s),s) s=selector.xpath("//book/price").extract_first() print(type(s),s)

      程序结果:

       [, ]
       ['29.99', '39.98']
       29.99
      

      由此可见:s=selector.xpath("//book/price")得到的是SelectorList列表;
      s=selector.xpath("//book/price").extract()得到的是元素的Selector对象对应的元素的文本组成的列表,即[29.99', u'39.98]s=selector.xpath("//book/price").extract_first()得到的是元素的文本组成的列表的第一个元素,是一个文本,即29.99

      • xpath使用"/@attrName"得到一个Selector元素的attrName属性节点对象,属性节点对象也是一个Selector对象,通过extract()函数获取其属性值。
      • 对上述的doc文档获取元素属性值:
      selector=Selector(text=htmlText)
      s=selector.xpath("//book/@id")
      print(s)
      print(s.extract())
      for e in s:
      	print(e.extract())
      

      程序结果:

      [, ]
      ['b1', 'b2']
      b1
      b2
      

      由此可见:s=selector.xpath("//book/@id")结果是2个的id属性组成的SelectorList列表,即属性也是一个Selector对象;print(s.extract())结果是的id属性的两个Selector对象的属性文本值的列表,即['b1','b2']e.extract()获取对象e的属性值。

      • xpath使用"/text()"得到一个Selector元素包含的文本值,文本值节点对象也是一个Selector对象,通过extract()获取文本值。
      • 获取上述doc文档的节点文本值
      selector=Selector(text=htmlText)
      s=selector.xpath("//book/title/text()")
      print(s)
      print(s.extract())
      for e in s:
      	print(e.extract())
      

      程序结果:

      [,]
      ['Harry Potter','Learning-XML']
      Harry Potter
      Learning-XML
      

      由此可见:s=selector.xpath("//book/title/text()")结果也是SelectorList列表,即文本也是一个节点;print(s.extract())结果是文本节点的字符串值的列表,即['Harry Potter','Learning-XML'];最后的for语句,每个e是一个Selector对象,因此extract()获取对象的属性值。值得注意的是如果一个element的元素包含的文本不是单一的文本,那么可能会产生多个文本值。

      • xpath使用"tag[condition]"来限定一个tag元素,其中condition是由这个tag的属性、文本等计算出的一个逻辑值。如果有多个条件,可以写成:"tag[condition1][condition2]...[conditionN]"或者"tag[condition1] and [condition2] and ... and [conditionN]"
      • xpath可以使用position()来确定其中一个元素的限制,这个选择序号是从1开始的,不是从0开始编号的,还可以通过and、or等构造复杂表达式。
      • xpath使用星号"*"代表任何Element节点,不包括Text、Comment的节点。
      • xpath使用"@*"代表任何属性。
      • xpath使用"element/parent::*"选择element的父节点,这个节点只有一个。如果写成"element/parent::tag",就是指定element的tag父节点,除非element的父节点正好是tag节点,不然就为None。
      • xpath使用"element/following-sibling::*"搜索element后面的同级的所有兄弟节点,使用"element/following-sibling::*[position()=1]"搜索element后面的同级的第一个兄弟节点。
      • xpath使用"element/preceding-sibling::*"搜索element前面的同级的所有兄弟节点,使用"element/preceding-sibling::*[position()=1]"搜索element前面的同级的第一个兄弟节点。

      Scrapy爬取与存储数据

      建立Web网站

      使用scrapy startproject demo语句创建一个demo的scrapy项目,在项目中创建一个server.py文件,用来编写网站内容,这个网站有一个网页,返回基本计算机教材,flask程序如下:

      import flask
      app = flask.Flask(__name__)
      
      @app.route("/")
      def index():
          html="""
          
          
              Python程序设计
              James
              人民邮电出版社
          
          
              Java程序设计
              Robert
              人民邮电出版社
          
          
              MySQL数据库
              Steven
              高等教育出版社
          
          
              """
          return html
      
      if __name__=="__main__":
          app.run()
      
      

      编写数据项目类

      程序爬取的数据是多本教材,每本教材有名称与作者,因此要建立一个教材的类,类中包括教材名称title,作者author与出版社publisher。在demo\demo目录下有一个items.py文件就是用来设计数据项目类的,打开文件,并改成如下形式:

      import scrapy
      
      class BookItem(scrapy.Item):
          # define the fields for your item here like:
          # name = scrapy.Field()
          title = scrapy.Field()
          author = scrapy.Field()
          publisher = scrapy.Field()
      

      其中BookItem是我们设计的教材项目类,这个类必须从scrapy.Itrm类继承,在类中定义教材的字段项目,每个字段项目都是一个scrapy.Field对象,定义了3个字段项目,分别用来存储title、author以及publisher。注:可以通过item[“title”]、item[“author”]、item[“publisher”]来获取或设置各个字段的值。

      编写爬虫程序myspider

      在demo\demo\spider目录下新建myspider.py文件,编写程序如下:

      import scrapy
      from scrapy import Selector
      #从demo文件夹的items.py文件中引入BookItem类的定义
      from demo.items import BookItem
      
      class MySpider(scrapy.Spider):
          name = "mySpider"
          start_urls = ["http://127.0.0.1:5000"]
      
          def parse(self, response):
              try:
                  #得到网站数据并建立Selector对象,搜索到所有的节点的元素
                  data = response.body.decode()
                  selector = Selector(text=data)
                  books = selector.xpath("//book")
                  for book in books:
                      item = BookItem()
                      #对于每个节点,在它的下面搜索、<author>、<publisher>节点,并取出它们的文本,组成一个BookItem对象
                      item['title'] = book.xpath("./title/text()").extract_first()
                      item['author'] = book.xpath("./author/text()").extract_first()
                      item['publisher'] = book.xpath("./publisher/text()").extract_first()
                      #向上一级调用函数返回
                      yield item
                      #向上一级调用函数返回,scrapy把BookItem对象推送给与items.py同目录下的pipeline.py文件中的数据管道执行类取处理数据
              except Exception as e:
                  print(e)
      </code></pre> 
        <h2>编写数据管道处理类</h2> 
        <p>在scrapy框架中的demo\demo目录下有一个pipeline.py文件,用来数据管道处理文件,打开这个文件可以看到一个默认的管道类,修改并设计管道程序如下:</p> 
        <pre><code>class BookPipeline(object):
          count=0
          def process_item(self, item, spider):
              BookPipeline.count+=1
              try:
                  if BookPipeline.count==1:
                      fobj=open("books.txt","wt")
                  else:
                      fobj=open("books.txt","at")
                  print(item["title"],item["author"],item["publisher"])
                  fobj.write(item["title"]+","+item["author"]+","+item["publisher"]+"\n")
                  fobj.close()
              except Exception as e:
                  print(e)
              return item
      
      </code></pre> 
        <p>说明:这个类,命名为BookPipeline,它继承自object类,类中最重要的函数是process_item函数,scrapy爬取数据开始会建立一个BookPipeline类对象,然后每爬取一个数据类BookItem项目item,mySpider程序就会把这个对象推送给BookPipeline对象,同时调用process_item函数一次。process_item函数的参数中的item就是推送来的数据,于是就可以在这个函数中保存完整的爬取数据了。</p> 
        <h2>设置scrapy的配置文件</h2> 
        <p>mySpider程序执行后每爬取一个item项目是如何推送给BookPipeline对象并调用process_item函数的呢?前提是必须设置一个通道。在demo文件夹中一个settings.py的设置文件,打开这个文件可以看到很多设置项目,大部分都是用#注释的语句,找到 语句ITEM_PIPLINES的项目,把它设置如下形式:</p> 
        <pre><code># Configure item pipelines
      # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
      ITEM_PIPELINES = {
          'demo.pipelines.BookPipeline': 300,
      }
      </code></pre> 
        <p>其中ITEM_PIPLINES是一个字典,把关键字改成 ‘demo.pipelines.BookPipeline’,而BookPipelines就是在pipelines.py文件中设计的数据管道类的名称,后面的300是一个默认的整数,可以是任何整数。这样设置后就可以连通爬虫mySpider程序通过yield返回的每项数据推送给pipelines.py程序的BookPipeline类,并执行process_item函数了。</p> 
        <h2>运行</h2> 
        <p>在demo中创建run.py文件,内容见上。运行run.py可得到一个book.txt文件。打开文件,则可见爬取存储数据是否成功。</p> 
        <h1>编写Scrapy爬虫程序</h1> 
        <h2>建立Web网站</h2> 
        <ol> 
         <li>books.html</li> 
        </ol> 
        <pre><code><h3>计算机</h3>
      <ul>
          <li><a href="database.html">数据库</a> </li>
          <li><a href="program.html">程序控制</a> </li>
          <li><a href="network.html">计算机网络</a> </li>
      </ul>
      </code></pre> 
        <ol start="2"> 
         <li>database.html</li> 
        </ol> 
        <pre><code><h3>数据库</h3>
      <ul>
          <li><a href="mysql.html">MySQL数据库</a> </li>
      </ul>
      <a href="books.html">返回首页</a>
      </code></pre> 
        <ol start="3"> 
         <li>program.html</li> 
        </ol> 
        <pre><code><h3>程序设计</h3>
      <ul>
          <li><a href="python.html">Python程序设计</a> </li>
          <li><a href="java.html">Java程序设计</a> </li>
      </ul>
      <a href="books.html">返回首页</a>
      </code></pre> 
        <ol start="4"> 
         <li>network.html</li> 
        </ol> 
        <pre><code><h3>计算机网络</h3>
      <a href="books.html">返回首页</a>
      </code></pre> 
        <ol start="5"> 
         <li>mysql.html</li> 
        </ol> 
        <pre><code><h3>MySQL数据库</h3>
      <a href="books.html">返回首页</a>
      </code></pre> 
        <ol start="6"> 
         <li>python.html</li> 
        </ol> 
        <pre><code><h3>Python程序设计</h3>
      <a href="books.html">返回首页</a>
      </code></pre> 
        <ol start="7"> 
         <li>java.html</li> 
        </ol> 
        <pre><code><h3>Java程序设计</h3>
      <a href="books.html">返回首页</a>
      </code></pre> 
        <ol start="8"> 
         <li>Web服务器程序 <code>flask.py</code></li> 
        </ol> 
        <pre><code>import flask
      import os
      app = flask.Flask(__name__)
      
      def getFile(fileName):
          data = b""
          if os.path.exists(fileName):
              fobj = open(fileName,"rb")
              data = fobj.read()
              fobj.close()
          return data
      
      @app.route("/")
      def index():
          return getFile("books.html")
      
      @app.route("/<section>")
      def process(section):
          data = ""
          if section != "":
              data = getFile(section)
          return data
      
      if __name__ == "__main__":
          app.run()
      </code></pre> 
        <h2>编写scrapy爬虫程序</h2> 
        <p>程序如下</p> 
        <pre><code>import scrapy
      from scrapy import Selector
      
      class MySpider(scrapy.Spider):
          name = "mySpider"
          #入口地址,访问这个网址成功后会回调parse函数 
          start_urls = ["http://127.0.0.1:5000"]
      	#定义一个回调函数,该函数的response对象包含了网站返回的信息
          def parse(self, response):
              try:
                  print(response.url)
                  #网站返回的response.body的二进制函数,要decode转为文本,然后建立Selector对象
                  data = response.body.decode()
                  selector = Selector(text=data)
                  #获取网页中的<h3>标题的文本
                  print(selector.xpath("//h3/text()").extract_first())
                  #获取所有的<a href=...>链接的href值,组成links列表
                  links = selector.xpath("//a/@href").extract()
                  for link in links:
                      url = response.urljoin(link)
                      yield scrapy.Request(url,callback=self.parse)
              except Exception as e:
                  print(e)
      
      </code></pre> 
        <p>运行run.py程序,得到如下结果:</p> 
        <pre><code>http://127.0.0.1:5000
      计算机
      http://127.0.0.1:5000/database.html
      数据库
      http://127.0.0.1:5000/network.html
      计算机网络
      http://127.0.0.1:5000/program.html
      程序设计
      http://127.0.0.1:5000/books.html
      计算机
      http://127.0.0.1:5000/mysql.html
      MySQL数据库
      http://127.0.0.1:5000/python.html
      Python程序设计
      http://127.0.0.1:5000/java.html
      Java程序设计
      </code></pre> 
        <p>说明:scrapy会自动筛选已经访问过的网站,访问links的每个link,通过urljoin函数与response.url地址组合成完整的url地址,再次建立Resquest对象,回调函数仍然为parse,即这个parse函数会被递归调用。其中使用了yield语句返回每个Request对象。</p> 
       </div> 
      </div>
                                  </div>
                              </div>
                          </div>
                          <!--PC和WAP自适应版-->
                          <div id="SOHUCS" sid="1175149986753622016"></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">你可能感兴趣的:(爬虫)</h4>
              <div id="paradigm-article-related">
                  <div class="recommend-post mb30">
                      <ul class="widget-links">
                          <li><a href="/article/1835490218845761536.htm"
                                 title="Python爬虫解析工具之xpath使用详解" target="_blank">Python爬虫解析工具之xpath使用详解</a>
                              <span class="text-muted">eqa11</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>文章目录Python爬虫解析工具之xpath使用详解一、引言二、环境准备1、插件安装2、依赖库安装三、xpath语法详解1、路径表达式2、通配符3、谓语4、常用函数四、xpath在Python代码中的使用1、文档树的创建2、使用xpath表达式3、获取元素内容和属性五、总结Python爬虫解析工具之xpath使用详解一、引言在Python爬虫开发中,数据提取是一个至关重要的环节。xpath作为一门</div>
                          </li>
                          <li><a href="/article/1835483159630802944.htm"
                                 title="nosql数据库技术与应用知识点" target="_blank">nosql数据库技术与应用知识点</a>
                              <span class="text-muted">皆过客,揽星河</span>
      <a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/nosql/1.htm">nosql</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%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E9%9D%9E%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">非关系型数据库</a>
                              <div>Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)</div>
                          </li>
                          <li><a href="/article/1835454921990828032.htm"
                                 title="Java爬虫框架(一)--架构设计" target="_blank">Java爬虫框架(一)--架构设计</a>
                              <span class="text-muted">狼图腾-狼之传说</span>
      <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BB%BB%E5%8A%A1/1.htm">任务</a><a class="tag" taget="_blank" href="/search/html%E8%A7%A3%E6%9E%90%E5%99%A8/1.htm">html解析器</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8/1.htm">存储</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1/1.htm">电子商务</a>
                              <div>一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast</div>
                          </li>
                          <li><a href="/article/1835454543471669248.htm"
                                 title="Java:爬虫框架" target="_blank">Java:爬虫框架</a>
                              <span class="text-muted">dingcho</span>
      <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><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>
                              <div>一、ApacheNutch2【参考地址】Nutch是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。Nutch致力于让每个人能很容易,同时花费很少就可以配置世界一流的Web搜索引擎.为了完成这一宏伟的目标,Nutch必须能够做到:每个月取几十亿网页为这些网页维护一个索引对索引文件进行每秒上千次的搜索提供高质量的搜索结果简单来说Nutch支持分</div>
                          </li>
                          <li><a href="/article/1835438028009598976.htm"
                                 title="WebMagic:强大的Java爬虫框架解析与实战" target="_blank">WebMagic:强大的Java爬虫框架解析与实战</a>
                              <span class="text-muted">Aaron_945</span>
      <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                              <div>文章目录引言官网链接WebMagic原理概述基础使用1.添加依赖2.编写PageProcessor高级使用1.自定义Pipeline2.分布式抓取优点结论引言在大数据时代,网络爬虫作为数据收集的重要工具,扮演着不可或缺的角色。Java作为一门广泛使用的编程语言,在爬虫开发领域也有其独特的优势。WebMagic是一个开源的Java爬虫框架,它提供了简单灵活的API,支持多线程、分布式抓取,以及丰富的</div>
                          </li>
                          <li><a href="/article/1835435506645692416.htm"
                                 title="00. 这里整理了最全的爬虫框架(Java + Python)" target="_blank">00. 这里整理了最全的爬虫框架(Java + Python)</a>
                              <span class="text-muted">有一只柴犬</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E7%B3%BB%E5%88%97/1.htm">爬虫系列</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                              <div>目录1、前言2、什么是网络爬虫3、常见的爬虫框架3.1、java框架3.1.1、WebMagic3.1.2、Jsoup3.1.3、HttpClient3.1.4、Crawler4j3.1.5、HtmlUnit3.1.6、Selenium3.2、Python框架3.2.1、Scrapy3.2.2、BeautifulSoup+Requests3.2.3、Selenium3.2.4、PyQuery3.2</div>
                          </li>
                          <li><a href="/article/1835412560413814784.htm"
                                 title="python爬取微信小程序数据,python爬取小程序数据" target="_blank">python爬取微信小程序数据,python爬取小程序数据</a>
                              <span class="text-muted">2301_81900439</span>
      <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                              <div>大家好,小编来为大家解答以下问题,python爬取微信小程序数据,python爬取小程序数据,现在让我们一起来看看吧!Python爬虫系列之微信小程序实战基于Scrapy爬虫框架实现对微信小程序数据的爬取首先,你得需要安装抓包工具,这里推荐使用Charles,至于怎么使用后期有时间我会出一个事例最重要的步骤之一就是分析接口,理清楚每一个接口功能,然后连接起来形成接口串思路,再通过Spider的回调</div>
                          </li>
                          <li><a href="/article/1835347005522669568.htm"
                                 title="大模型训练数据库Common Crawl" target="_blank">大模型训练数据库Common Crawl</a>
                              <span class="text-muted">WindyChanChan</span>
      <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                              <div>CommonCrawl介绍‌‌CommonCrawl是一个非营利组织,致力于通过大规模分布式爬虫系统定期抓取整个Web并将其存储在一个可公开访问的数据库中。CommonCrawl的数据收集和处理过程包括使用Python开源爬虫工具收集全球范围内的网站数据,并将其上传到‌CommonCrawl基金会的数据仓库中。该项目从2008年开始,至今已经积累了大量的原始网页数据、元数据和文本提取数据。这些数据</div>
                          </li>
                          <li><a href="/article/1835342718067372032.htm"
                                 title="Python精选200Tips:121-125" target="_blank">Python精选200Tips:121-125</a>
                              <span class="text-muted">AnFany</span>
      <a class="tag" taget="_blank" href="/search/Python200%2BTips/1.htm">Python200+Tips</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>Spendyourtimeonself-improvement121Requests-简化的HTTP请求处理发送GET请求发送POST请求发送PUT请求发送DELETE请求会话管理处理超时文件上传122BeautifulSoup-网页解析和抓取解析HTML和XML文档查找单个标签查找多个标签使用CSS选择器查找标签提取文本修改文档内容删除标签处理XML文档123Scrapy-强大的网络爬虫框架示例</div>
                          </li>
                          <li><a href="/article/1835333520919195648.htm"
                                 title="爬虫技术抓取网站数据被限制怎么处理" target="_blank">爬虫技术抓取网站数据被限制怎么处理</a>
                              <span class="text-muted">Bearjumpingcandy</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                              <div>爬虫技术用于抓取网站数据时,可能会遇到一些限制,常见的包括反爬机制、速率限制、IP封禁等。以下是应对这些情况的一些策略:尊重robots.txt:每个网站都有robots.txt文件,遵循其中的规定可以避免触犯网站的抓取规则。设置合理频率:控制爬虫请求的速度,通过添加延迟或使用代理服务器,减少对目标网站的压力。使用代理:获取并使用代理IP地址可以更换访问来源,降低被识别的可能性。模拟用户行为:使用</div>
                          </li>
                          <li><a href="/article/1835333267952332800.htm"
                                 title="网站推广爬虫" target="_blank">网站推广爬虫</a>
                              <span class="text-muted">Bearjumpingcandy</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                              <div>网站推广爬虫是一种用于升网站曝光度和推广效果的工具。它通过自动化地访问和收集网站信息,从而实现对目标网站的广告、关键词、排名等数据进行分析和优化。以下是网站推广爬虫的一些介绍:数据收集:网站推广爬虫可以自动访问目标网站,并收集相关的数据,如网站流量、关键词排名、竞争对手信息等。这些数据可以帮助网站推广人员了解网站的现状和竞争环境,从而制定相应的推广策略。关键词优化:通过分析搜索引擎的关键词排名情况</div>
                          </li>
                          <li><a href="/article/1835333268375957504.htm"
                                 title="爬虫技术抓取网站数据" target="_blank">爬虫技术抓取网站数据</a>
                              <span class="text-muted">Bearjumpingcandy</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                              <div>爬虫技术是一种自动化获取网站数据的技术,它可以模拟人类浏览器的行为,访问网页并提取所需的信息。以下是爬虫技术抓取网站数据的一般步骤:发起HTTP请求:爬虫首先会发送HTTP请求到目标网站,获取网页的内容。解析HTML:获取到网页内容后,爬虫会使用HTML解析器解析HTML代码,提取出需要的数据。数据提取:通过使用XPath、CSS选择器或正则表达式等工具,爬虫可以从HTML中提取出所需的数据,如文</div>
                          </li>
                          <li><a href="/article/1835333268858302464.htm"
                                 title="爬虫技术抓取网站数据" target="_blank">爬虫技术抓取网站数据</a>
                              <span class="text-muted">Bearjumpingcandy</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                              <div>爬虫技术是指通过程序自动访问网页并提取数据的技术。一般来说,爬虫技术包含以下几个步骤:确定目标网站:确定需要抓取的网站,并了解其页面结构和数据特点。分析页面结构:分析网页的结构和源代码,找到需要抓取的数据在页面中的位置和标识。编写爬虫程序:使用编程语言(如Python)编写爬虫程序,实现对目标网站的自动访问和数据提取。处理抓取数据:对抓取到的数据进行清洗、去重、整合等处理,以便后续的分析和利用。爬</div>
                          </li>
                          <li><a href="/article/1835332888674004992.htm"
                                 title="爬虫之隧道代理:如何在爬虫中使用代理IP?" target="_blank">爬虫之隧道代理:如何在爬虫中使用代理IP?</a>
                              <span class="text-muted">2401_87251497</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/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/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                              <div>在进行网络爬虫时,使用代理IP是一种常见的方式来绕过网站的反爬虫机制,提高爬取效率和数据质量。本文将详细介绍如何在爬虫中使用隧道代理,包括其原理、优势以及具体的实现方法。无论您是爬虫新手还是有经验的开发者,这篇文章都将为您提供实用的指导。什么是隧道代理?隧道代理是一种高级的代理技术,它通过创建一个加密的隧道,将数据从客户端传输到代理服务器,再由代理服务器转发到目标服务器。这样不仅可以隐藏客户端的真</div>
                          </li>
                          <li><a href="/article/1835288964056051712.htm"
                                 title="分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 spark大数据毕设项目(源码、调试、LW、开题、PPT)" target="_blank">分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 spark大数据毕设项目(源码、调试、LW、开题、PPT)</a>
                              <span class="text-muted">计算机源码社</span>
      <a class="tag" taget="_blank" href="/search/Python%E9%A1%B9%E7%9B%AE/1.htm">Python项目</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E9%80%89%E9%A2%98/1.htm">计算机毕业设计选题</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E6%BA%90%E7%A0%81/1.htm">计算机毕业设计源码</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/spark%E6%AF%95%E8%AE%BE/1.htm">spark毕设</a>
                              <div>作者:计算机源码社个人简介:本人八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!学习资料、程序开发、技术解答、文档报告如需要源码,可以扫取文章下方二维码联系咨询Java项目微信小程序项目Android项目Python项目PHP项目ASP.NET项目Node.js项目选题推荐项目实战|p</div>
                          </li>
                          <li><a href="/article/1835270188086423552.htm"
                                 title="python抓取网页内容401应该用哪个库_python3使用requests模块爬取页面内容入门" target="_blank">python抓取网页内容401应该用哪个库_python3使用requests模块爬取页面内容入门</a>
                              <span class="text-muted">坂田月半</span>
      
                              <div>python的爬虫相关模块有很多,除了requests模块,再如urllib和pycurl以及tornado等。相比而言,requests模块是相对简单易上手的。通过文本,大家可以迅速学会使用python的requests模块爬取页码内容。1.Requests唯一的一个非转基因的PythonHTTP库,人类可以安全享用。官网:http://cn.python-requests.org/zh_CN/</div>
                          </li>
                          <li><a href="/article/1835257575277424640.htm"
                                 title="【Python爬虫】百度百科词条内容" target="_blank">【Python爬虫】百度百科词条内容</a>
                              <span class="text-muted">PokiFighting</span>
      <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86/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>词条内容我这里随便选取了一个链接,用的是FBI的词条importurllib.requestimporturllib.parsefromlxmlimportetreedefquery(url):headers={'user-agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.</div>
                          </li>
                          <li><a href="/article/1835253670858551296.htm"
                                 title="爬虫和代理IP的关系" target="_blank">爬虫和代理IP的关系</a>
                              <span class="text-muted">xiaoxiongip666</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                              <div>爬虫和代理IP之间的关系是相互依存的。代理IP为爬虫提供了绕过IP限制、隐藏真实IP、提高访问速度等能力,使得爬虫能够更有效地进行数据抓取。然而,在使用时也需要注意合法性、稳定性、成本以及隐私保护等问题。</div>
                          </li>
                          <li><a href="/article/1835219887434330112.htm"
                                 title="python语言爬虫爬取歌曲程序代码" target="_blank">python语言爬虫爬取歌曲程序代码</a>
                              <span class="text-muted">EYYLTV</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/android/1.htm">android</a>
                              <div>importrequestssong_urls=[“http://music.163.com/song/media/outer/url?id=25795016.mp3”,“https://m703.music.126.net/20240915140140/670dfe5c0144991d4cb778d6662fd762/jd-musicrep-privatecloud-audio-public/o</div>
                          </li>
                          <li><a href="/article/1835219887958618112.htm"
                                 title="python语言爬虫爬取歌曲代码X" target="_blank">python语言爬虫爬取歌曲代码X</a>
                              <span class="text-muted">EYYLTV</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/java/1.htm">java</a>
                              <div>importrequestssong_urls=[“https://m804.music.126.net/20240915142147/4e01caa69abda60b165e185607805ee1/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/30379084686/b56a/dbd5/39fc/792d87f5d7014bb78547ec3804eeaac5.m4a?au</div>
                          </li>
                          <li><a href="/article/1835198462984024064.htm"
                                 title="拼多多商家电话采集工具 爬虫教程分享" target="_blank">拼多多商家电话采集工具 爬虫教程分享</a>
                              <span class="text-muted">小电商达人</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                              <div>以下是使用Python编写的拼多多商家电话采集爬虫教程:一、前期准备安装Python:从Python官方网站下载并安装最新版本的Python,安装过程中注意勾选将Python添加到系统路径选项。安装相关库:在命令提示符中运行以下命令来安装所需的库。pipinstallrequests:用于发送HTTP请求获取网页内容。pipinstallbeautifulsoup4:用于解析HTML页面。二、分析</div>
                          </li>
                          <li><a href="/article/1835157319500001280.htm"
                                 title="Python爬虫代理池" target="_blank">Python爬虫代理池</a>
                              <span class="text-muted">极客李华</span>
      <a class="tag" taget="_blank" href="/search/python%E6%8E%88%E8%AF%BE/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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                              <div>Python爬虫代理池网络爬虫在数据采集和信息抓取方面起到了关键作用。然而,为了应对网站的反爬虫机制和保护爬虫的真实身份,使用代理池变得至关重要。1.代理池的基本概念:代理池是一组包含多个代理IP地址的集合。通过在爬虫中使用代理池,我们能够隐藏爬虫的真实IP地址,实现一定程度的匿名性。这有助于防止被目标网站封锁或限制访问频率。2.为何使用代理池:匿名性:代理池允许爬虫在请求目标网站时使用不同的IP</div>
                          </li>
                          <li><a href="/article/1835143079305244672.htm"
                                 title="大数据毕业设计hadoop+spark+hive知识图谱租房数据分析可视化大屏 租房推荐系统 58同城租房爬虫 房源推荐系统 房价预测系统 计算机毕业设计 机器学习 深度学习 人工智能" target="_blank">大数据毕业设计hadoop+spark+hive知识图谱租房数据分析可视化大屏 租房推荐系统 58同城租房爬虫 房源推荐系统 房价预测系统 计算机毕业设计 机器学习 深度学习 人工智能</a>
                              <span class="text-muted">2401_84572577</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/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</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的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。我先来介绍一下这些东西怎么用,文末抱走。(1)Python所有方向的学习路线(</div>
                          </li>
                          <li><a href="/article/1835067814621310976.htm"
                                 title="10个高效的Python爬虫框架,你用过几个?" target="_blank">10个高效的Python爬虫框架,你用过几个?</a>
                              <span class="text-muted">进击的C语言</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                              <div>小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapyscrapy官网:https://scrapy.org/scrapy中文文档:https://www.osgeo.cn/scrapy/intro/oScrapy是一个为了爬取网站数据,提取结构性数据而编写的</div>
                          </li>
                          <li><a href="/article/1835007168928116736.htm"
                                 title="python爬虫(5)之CSDN" target="_blank">python爬虫(5)之CSDN</a>
                              <span class="text-muted">It is a deal️</span>
      <a class="tag" taget="_blank" href="/search/%E5%B0%8F%E9%A1%B9%E7%9B%AE/1.htm">小项目</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                              <div>CSDN的爬虫相对于doubatop250更加简单,一般只需要title和url即可下面是相关的代码:#爬虫之csdn#分析urlhttps://www.csdn.net/api/articles?type=more&category=python&shown_offset=0(firstpage)#https://www.csdn.net/api/articles?type=more&categ</div>
                          </li>
                          <li><a href="/article/1835005152646492160.htm"
                                 title="python学习第七节:正则表达式" target="_blank">python学习第七节:正则表达式</a>
                              <span class="text-muted">一只会敲代码的小灰灰</span>
      <a class="tag" taget="_blank" href="/search/python%E5%AD%A6%E4%B9%A0/1.htm">python学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</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>python学习第七节:正则表达式正则表达式基本上在所有开发语言中都会使用到,在python中尤为重要。当我们使用python开发爬虫程序将目标网页扒下来之后我们要从网页中解析出我们想要的信息,这个时候就需要正则表达式去进行匹配。importrere的常量re模块中有9个常量,常量的值都是int类型!(知道就行)修饰符描述re.l使匹配对大小写不敏感re.L做本地化识别(locale-aware)</div>
                          </li>
                          <li><a href="/article/1834965554214039552.htm"
                                 title="分布式框架Celery七(Django-Celery-Flower实现异步和定时爬虫及其监控邮件告警)" target="_blank">分布式框架Celery七(Django-Celery-Flower实现异步和定时爬虫及其监控邮件告警)</a>
                              <span class="text-muted">yjjpp2301</span>
      <a class="tag" taget="_blank" href="/search/Celery/1.htm">Celery</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/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                              <div>Django中集成方式安装模块pipinstallDjango==3.2.22pipinstallcelerypipinstallredispipinstalleventlet#在windows环境下需要安装eventlet包-----------pipinstalldjango-celery-beatpipinstalldjango-celery-resultspipinstalldjango-</div>
                          </li>
                          <li><a href="/article/1834960888273137664.htm"
                                 title="生产者消费者模式_Labview基础之生产者消费者设计模式(事件)" target="_blank">生产者消费者模式_Labview基础之生产者消费者设计模式(事件)</a>
                              <span class="text-muted">weixin_39532699</span>
      <a class="tag" taget="_blank" href="/search/%E7%94%9F%E4%BA%A7%E8%80%85%E6%B6%88%E8%B4%B9%E8%80%85%E6%A8%A1%E5%BC%8F/1.htm">生产者消费者模式</a>
                              <div>1绪论近期,开了一个QQ群,刚开始的目的也是想多拉写软件相关的大神,有问题的时候也可以交流交流。记得当时有个软件在写的时候遇到了一个棘手的问题,outlook邮箱配置账户密码的问题,到现在也没解决,算了,也不是很迫切。2000人群就留在那里爬虫发单吧!建群以后才发现,原来这一块的小白还挺多,总结起来就一个原因:做这个软件的大多数都不是软件出生,都是因为临时要搭建一个上位机平台,匆匆入门......</div>
                          </li>
                          <li><a href="/article/1834943236649611264.htm"
                                 title="Python——爬虫" target="_blank">Python——爬虫</a>
                              <span class="text-muted">星和月</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                              <div>当编写一个Python爬虫时,你可以使用BeautifulSoup库来解析网页内容,使用requests库来获取网页的HTML代码。下面是一个简单的示例,演示了如何获取并解析网页内容:importrequestsfrombs4importBeautifulSoup#发送HTTP请求获取网页内容url='https://www.example.com'#要爬取的网页的URLresponse=requ</div>
                          </li>
                          <li><a href="/article/1834807218839580672.htm"
                                 title="Python数据分析之股票信息可视化实现matplotlib" target="_blank">Python数据分析之股票信息可视化实现matplotlib</a>
                              <span class="text-muted">Blogfish</span>
      <a class="tag" taget="_blank" href="/search/Python3/1.htm">Python3</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">可视化</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                              <div>今天学习爬虫技术数据分析对于股票信息的分析及结果呈现,目标是实现对股票信息的爬取并对数据整理后,生成近期成交量折线图。首先,做这个案例一定要有一个明确的思路。知道要干啥,知道用哪些知识,有些方法我也记不住百度下知识库很强大,肯定有答案。有思路以后准备对数据处理,就是几个方法使用了。接口地址参考:Tushare数据涉及知识库:tushare-一个财经数据开放接口;pandas-实现将数据整理为表格,</div>
                          </li>
                                      <li><a href="/article/95.htm"
                                             title="PHP,安卓,UI,java,linux视频教程合集" target="_blank">PHP,安卓,UI,java,linux视频教程合集</a>
                                          <span class="text-muted">cocos2d-x小菜</span>
      <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                          <div>╔-----------------------------------╗┆                           </div>
                                      </li>
                                      <li><a href="/article/222.htm"
                                             title="zookeeper admin 笔记" target="_blank">zookeeper admin 笔记</a>
                                          <span class="text-muted">braveCS</span>
      <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a>
                                          <div>  
      Required Software 
      1) JDK>=1.6 
      2)推荐使用ensemble的ZooKeeper(至少3台),并run on separate machines 
      3)在Yahoo!,zk配置在特定的RHEL boxes里,2个cpu,2G内存,80G硬盘 
         
      
      
      数据和日志目录  
      1)数据目录里的文件是zk节点的持久化备份,包括快照和事务日</div>
                                      </li>
                                      <li><a href="/article/349.htm"
                                             title="Spring配置多个连接池" target="_blank">Spring配置多个连接池</a>
                                          <span class="text-muted">easterfly</span>
      <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                          <div>项目中需要同时连接多个数据库的时候,如何才能在需要用到哪个数据库就连接哪个数据库呢? 
      Spring中有关于dataSource的配置: 
          <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
        &nb</div>
                                      </li>
                                      <li><a href="/article/476.htm"
                                             title="Mysql" target="_blank">Mysql</a>
                                          <span class="text-muted">171815164</span>
      <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                          <div>例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。 
       
      GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI 
       
      TH GRANT OPTION; 
       
      如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作</div>
                                      </li>
                                      <li><a href="/article/603.htm"
                                             title="CommonDAO(公共/基础DAO)" target="_blank">CommonDAO(公共/基础DAO)</a>
                                          <span class="text-muted">g21121</span>
      <a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a>
                                          <div>        好久没有更新博客了,最近一段时间工作比较忙,所以请见谅,无论你是爱看呢还是爱看呢还是爱看呢,总之或许对你有些帮助。 
              DAO(Data Access Object)是一个数据访问(顾名思义就是与数据库打交道)接口,DAO一般在业</div>
                                      </li>
                                      <li><a href="/article/730.htm"
                                             title="直言有讳" target="_blank">直言有讳</a>
                                          <span class="text-muted">永夜-极光</span>
      <a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%82%9F/1.htm">感悟</a><a class="tag" taget="_blank" href="/search/%E9%9A%8F%E7%AC%94/1.htm">随笔</a>
                                          <div>  
      1.转载地址:http://blog.csdn.net/jasonblog/article/details/10813313 
        
      精华: 
      “直言有讳”是阿里巴巴提倡的一种观念,而我在此之前并没有很深刻的认识。为什么呢?就好比是读书时候做阅读理解,我喜欢我自己的解读,并不喜欢老师给的意思。在这里也是。我自己坚持的原则是互相尊重,我觉得阿里巴巴很多价值观其实是基本的做人</div>
                                      </li>
                                      <li><a href="/article/857.htm"
                                             title="安装CentOS 7 和Win 7后,Win7 引导丢失" target="_blank">安装CentOS 7 和Win 7后,Win7 引导丢失</a>
                                          <span class="text-muted">随便小屋</span>
      <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                                          <div>一般安装双系统的顺序是先装Win7,然后在安装CentOS,这样CentOS可以引导WIN 7启动。但安装CentOS7后,却找不到Win7 的引导,稍微修改一点东西即可。 
      一、首先具有root 的权限。 
           即进入Terminal后输入命令su,然后输入密码即可 
      二、利用vim编辑器打开/boot/grub2/grub.cfg文件进行修改 
      v</div>
                                      </li>
                                      <li><a href="/article/984.htm"
                                             title="Oracle备份与恢复案例" target="_blank">Oracle备份与恢复案例</a>
                                          <span class="text-muted">aijuans</span>
      <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                          <div>Oracle备份与恢复案例 
      一. 理解什么是数据库恢复当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与</div>
                                      </li>
                                      <li><a href="/article/1111.htm"
                                             title="JavaEE开源快速开发平台G4Studio v5.0发布" target="_blank">JavaEE开源快速开发平台G4Studio v5.0发布</a>
                                          <span class="text-muted">無為子</span>
      
                                          <div>  
      我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V5.0版本已经正式发布。 
        
      访问G4Studio网站  
      http://www.g4it.org       
      2013-04-06 发布G4Studio_V5.0版本 
      功能新增 
      (1). 新增了调用Oracle存储过程返回游标,并将游标映射为Java List集合对象的标</div>
                                      </li>
                                      <li><a href="/article/1238.htm"
                                             title="Oracle显示根据高考分数模拟录取" target="_blank">Oracle显示根据高考分数模拟录取</a>
                                          <span class="text-muted">百合不是茶</span>
      <a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a><a class="tag" taget="_blank" href="/search/oracle%E4%BE%8B%E5%AD%90/1.htm">oracle例子</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F%E9%AB%98%E8%80%83%E5%BD%95%E5%8F%96/1.htm">模拟高考录取</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E4%BA%A4%E6%B5%81/1.htm">学习交流</a>
                                          <div>题目要求: 
      1,创建student表和result表
      2,pl/sql对学生的成绩数据进行处理
      3,处理的逻辑是根据每门专业课的最低分线和总分的最低分数线自动的将录取和落选 
        
        
      1,创建student表,和result表 
      学生信息表; 
      create table student(
         student_id number primary key,--学生id</div>
                                      </li>
                                      <li><a href="/article/1365.htm"
                                             title="优秀的领导与差劲的领导" target="_blank">优秀的领导与差劲的领导</a>
                                          <span class="text-muted">bijian1013</span>
      <a class="tag" taget="_blank" href="/search/%E9%A2%86%E5%AF%BC/1.htm">领导</a><a class="tag" taget="_blank" href="/search/%E7%AE%A1%E7%90%86/1.htm">管理</a><a class="tag" taget="_blank" href="/search/%E5%9B%A2%E9%98%9F/1.htm">团队</a>
                                          <div>责任 
      
        优秀的领导:优秀的领导总是对他所负责的项目担负起责任。如果项目不幸失败了,那么他知道该受责备的人是他自己,并且敢于承认错误。 
        
       差劲的领导:差劲的领导觉得这不是他的问题,因此他会想方设法证明是他的团队不行,或是将责任归咎于团队中他不喜欢的那几个成员身上。 
       
      努力工作 
      
        优秀的领导:团队领导应该是团队成员的榜样。至少,他应该与团队中的其他成员一样努力工作。这仅仅因为他</div>
                                      </li>
                                      <li><a href="/article/1492.htm"
                                             title="js函数在浏览器下的兼容" target="_blank">js函数在浏览器下的兼容</a>
                                          <span class="text-muted">Bill_chen</span>
      <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/IE/1.htm">IE</a><a class="tag" taget="_blank" href="/search/DWR/1.htm">DWR</a><a class="tag" taget="_blank" href="/search/ext/1.htm">ext</a>
                                          <div>  做前端开发的工程师,少不了要用FF进行测试,纯js函数在不同浏览器下,名称也可能不同。对于IE6和FF,取得下一结点的函数就不尽相同: 
       
        IE6:node.nextSibling,对于FF是不能识别的; 
       
        FF:node.nextElementSibling,对于IE是不能识别的; 
       
      兼容解决方式:var Div = node.nextSibl</div>
                                      </li>
                                      <li><a href="/article/1619.htm"
                                             title="【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)" target="_blank">【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)</a>
                                          <span class="text-muted">bit1129</span>
      <a class="tag" taget="_blank" href="/search/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/1.htm">垃圾回收</a>
                                          <div>吞吐量与用户线程暂停时间 
        
      衡量垃圾回收算法优劣的指标有两个: 
       
       吞吐量越高,则算法越好 
       暂停时间越短,则算法越好 
       
      首先说明吞吐量和暂停时间的含义。 
        
      垃圾回收时,JVM会启动几个特定的GC线程来完成垃圾回收的任务,这些GC线程与应用的用户线程产生竞争关系,共同竞争处理器资源以及CPU的执行时间。GC线程不会对用户带来的任何价值,因此,好的GC应该占</div>
                                      </li>
                                      <li><a href="/article/1746.htm"
                                             title="J2EE监听器和过滤器基础" target="_blank">J2EE监听器和过滤器基础</a>
                                          <span class="text-muted">白糖_</span>
      <a class="tag" taget="_blank" href="/search/J2EE/1.htm">J2EE</a>
                                          <div> Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文。 
      监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听。 
        
       
       ServletContex监听器 
         ServletContex又叫application</div>
                                      </li>
                                      <li><a href="/article/1873.htm"
                                             title="博弈AngularJS讲义(16) - 提供者" target="_blank">博弈AngularJS讲义(16) - 提供者</a>
                                          <span class="text-muted">boyitech</span>
      <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/api/1.htm">api</a><a class="tag" taget="_blank" href="/search/Angular/1.htm">Angular</a><a class="tag" taget="_blank" href="/search/Provider/1.htm">Provider</a>
                                          <div>  Angular框架提供了强大的依赖注入机制,这一切都是有注入器(injector)完成. 注入器会自动实例化服务组件和符合Angular API规则的特殊对象,例如控制器,指令,过滤器动画等。 
        那注入器怎么知道如何去创建这些特殊的对象呢? Angular提供了5种方式让注入器创建对象,其中最基础的方式就是提供者(provider), 其余四种方式(Value, Fac</div>
                                      </li>
                                      <li><a href="/article/2000.htm"
                                             title="java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。" target="_blank">java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。</a>
                                          <span class="text-muted">bylijinnan</span>
      <a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                          <div>
      
      public class CommonSubSequence {
      
      	/**
      	 * 题目:写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
      	 * 写一个版本算法复杂度O(N^2)和一个O(N) 。
      	 * 
      	 * O(N^2):对于a中的每个字符,遍历b中的每个字符,如果相同,则拷贝到新字符串中。
      	 * O(</div>
                                      </li>
                                      <li><a href="/article/2127.htm"
                                             title="sqlserver 2000 无法验证产品密钥" target="_blank">sqlserver 2000 无法验证产品密钥</a>
                                          <span class="text-muted">Chen.H</span>
      <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a><a class="tag" taget="_blank" href="/search/Microsoft/1.htm">Microsoft</a>
                                          <div>在 Service Pack 4 (SP 4), 是运行 Microsoft Windows Server 2003、 Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 服务器上您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体。 这样做, 收到以下错误信息CD KEY的 SQ</div>
                                      </li>
                                      <li><a href="/article/2254.htm"
                                             title="[新概念武器]气象战争" target="_blank">[新概念武器]气象战争</a>
                                          <span class="text-muted">comsci</span>
      
                                          <div> 
       
             气象战争的发动者必须是拥有发射深空航天器能力的国家或者组织.... 
       
             原因如下: 
       
             地球上的气候变化和大气层中的云层涡旋场有密切的关系,而维持一个在大气层某个层次</div>
                                      </li>
                                      <li><a href="/article/2381.htm"
                                             title="oracle 中 rollup、cube、grouping 使用详解" target="_blank">oracle 中 rollup、cube、grouping 使用详解</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/grouping/1.htm">grouping</a><a class="tag" taget="_blank" href="/search/rollup/1.htm">rollup</a><a class="tag" taget="_blank" href="/search/cube/1.htm">cube</a>
                                          <div>oracle 中 rollup、cube、grouping 使用详解 -- 使用oracle 样例表演示 转自namesliu 
       
      -- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景  
        
      --- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数  COUNT(SAL)  
       </div>
                                      </li>
                                      <li><a href="/article/2508.htm"
                                             title="技术资料汇总分享" target="_blank">技术资料汇总分享</a>
                                          <span class="text-muted">Dead_knight</span>
      <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%96%99%E6%B1%87%E6%80%BB+%E5%88%86%E4%BA%AB/1.htm">技术资料汇总 分享</a>
                                          <div>本人汇总的技术资料,分享出来,希望对大家有用。 
       
      http://pan.baidu.com/s/1jGr56uE 
       
      资料主要包含: 
      Workflow->工作流相关理论、框架(OSWorkflow、JBPM、Activiti、fireflow...) 
      Security->java安全相关资料(SSL、SSO、SpringSecurity、Shiro、JAAS...) 
      Ser</div>
                                      </li>
                                      <li><a href="/article/2635.htm"
                                             title="初一下学期难记忆单词背诵第一课" target="_blank">初一下学期难记忆单词背诵第一课</a>
                                          <span class="text-muted">dcj3sjt126com</span>
      <a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                          <div>could 能够 
      minute 分钟 
      Tuesday 星期二 
      February 二月 
      eighteenth 第十八 
      listen 听 
      careful 小心的,仔细的 
      short 短的 
      heavy 重的 
      empty 空的 
      certainly 当然 
      carry 携带;搬运 
      tape 磁带 
      basket 蓝子 
      bottle 瓶 
      juice 汁,果汁 
      head 头;头部 
      </div>
                                      </li>
                                      <li><a href="/article/2762.htm"
                                             title="截取视图的图片, 然后分享出去" target="_blank">截取视图的图片, 然后分享出去</a>
                                          <span class="text-muted">dcj3sjt126com</span>
      <a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/Objective-C/1.htm">Objective-C</a>
                                          <div>OS 7 has a new method that allows you to draw a view hierarchy into the current graphics context. This can be used to get an UIImage very fast. 
      I implemented a category method on UIView to get the vi</div>
                                      </li>
                                      <li><a href="/article/2889.htm"
                                             title="MySql重置密码" target="_blank">MySql重置密码</a>
                                          <span class="text-muted">fanxiaolong</span>
      <a class="tag" taget="_blank" href="/search/MySql%E9%87%8D%E7%BD%AE%E5%AF%86%E7%A0%81/1.htm">MySql重置密码</a>
                                          <div>方法一: 
       在my.ini的[mysqld]字段加入: 
      skip-grant-tables 
      重启mysql服务,这时的mysql不需要密码即可登录数据库 
       然后进入mysql 
      mysql>use mysql; 
       mysql>更新 user set password=password('新密码') WHERE User='root'; 
      mysq</div>
                                      </li>
                                      <li><a href="/article/3016.htm"
                                             title="Ehcache(03)——Ehcache中储存缓存的方式" target="_blank">Ehcache(03)——Ehcache中储存缓存的方式</a>
                                          <span class="text-muted">234390216</span>
      <a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/MemoryStore/1.htm">MemoryStore</a><a class="tag" taget="_blank" href="/search/DiskStore/1.htm">DiskStore</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8/1.htm">存储</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E9%99%A4%E7%AD%96%E7%95%A5/1.htm">驱除策略</a>
                                          <div>Ehcache中储存缓存的方式 
        
      目录 
      1     堆内存(MemoryStore) 
      1.1     指定可用内存 
      1.2     驱除策略 
      1.3     元素过期 
      2   &nbs</div>
                                      </li>
                                      <li><a href="/article/3143.htm"
                                             title="spring mvc中的@propertysource" target="_blank">spring mvc中的@propertysource</a>
                                          <span class="text-muted">jackyrong</span>
      <a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a>
                                          <div>  在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了: 
       
      @PropertySource  在spring 3.1中开始引入 
       
      比如有配置文件 
      config.properties 
       
      mongodb.url=1.2.3.4 
      mongodb.db=hello 
       
      则代码中 
        
      
      @PropertySource(&</div>
                                      </li>
                                      <li><a href="/article/3270.htm"
                                             title="重学单例模式" target="_blank">重学单例模式</a>
                                          <span class="text-muted">lanqiu17</span>
      <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/Singleton/1.htm">Singleton</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%BC%8F/1.htm">模式</a>
                                          <div>最近在重新学习设计模式,感觉对模式理解更加深刻。觉得有必要记下来。 
      	第一个学的就是单例模式,单例模式估计是最好理解的模式了。它的作用就是防止外部创建实例,保证只有一个实例。
      	单例模式的常用实现方式有两种,就人们熟知的饱汉式与饥汉式,具体就不多说了。这里说下其他的实现方式
      	静态内部类方式: 
      package test.pattern.singleton.statics;
      
      publ</div>
                                      </li>
                                      <li><a href="/article/3397.htm"
                                             title=".NET开源核心运行时,且行且珍惜" target="_blank">.NET开源核心运行时,且行且珍惜</a>
                                          <span class="text-muted">netcome</span>
      <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a>
                                          <div>背景 
      2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心</div>
                                      </li>
                                      <li><a href="/article/3524.htm"
                                             title="使用oscahe缓存技术减少与数据库的频繁交互" target="_blank">使用oscahe缓存技术减少与数据库的频繁交互</a>
                                          <span class="text-muted">Everyday都不同</span>
      <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</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/oscahe%E7%BC%93%E5%AD%98/1.htm">oscahe缓存</a>
                                          <div>此前一直不知道缓存的具体实现,只知道是把数据存储在内存中,以便下次直接从内存中读取。对于缓存的使用也没有概念,觉得缓存技术是一个比较”神秘陌生“的领域。但最近要用到缓存技术,发现还是很有必要一探究竟的。 
        
      缓存技术使用背景:一般来说,对于web项目,如果我们要什么数据直接jdbc查库好了,但是在遇到高并发的情形下,不可能每一次都是去查数据库,因为这样在高并发的情形下显得不太合理——</div>
                                      </li>
                                      <li><a href="/article/3651.htm"
                                             title="Spring+Mybatis 手动控制事务" target="_blank">Spring+Mybatis 手动控制事务</a>
                                          <span class="text-muted">toknowme</span>
      <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a>
                                          <div>@Override 
         public boolean testDelete(String jobCode) throws Exception { 
            boolean flag = false; 
       &nbs</div>
                                      </li>
                                      <li><a href="/article/3778.htm"
                                             title="菜鸟级的android程序员面试时候需要掌握的知识点" target="_blank">菜鸟级的android程序员面试时候需要掌握的知识点</a>
                                          <span class="text-muted">xp9802</span>
      <a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                          <div>熟悉Android开发架构和API调用 
      掌握APP适应不同型号手机屏幕开发技巧 
      熟悉Android下的数据存储  
      熟练Android Debug Bridge Tool 
      熟练Eclipse/ADT及相关工具  
      熟悉Android框架原理及Activity生命周期 
      熟练进行Android UI布局 
      熟练使用SQLite数据库; 
      熟悉Android下网络通信机制,S</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>