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/1892614879488045056.htm"
                                 title="【全栈】SprintBoot+vue3迷你商城-细节解析(2):分页" target="_blank">【全栈】SprintBoot+vue3迷你商城-细节解析(2):分页</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                              <div>【全栈】SprintBoot+vue3迷你商城-细节解析(2):分页往期的文章都在这里啦,大家有兴趣可以看一下后端部分:【全栈】SprintBoot+vue3迷你商城(1)【全栈】SprintBoot+vue3迷你商城(2)【全栈】SprintBoot+vue3迷你商城-扩展:利用python爬虫爬取商品数据【全栈】SprintBoot+vue3迷你商城(3)【全栈】SprintBoot+vue3</div>
                          </li>
                          <li><a href="/article/1892601637646692352.htm"
                                 title="【MySQL】表空间丢失处理(Tablespace is missing for table 错误处理)" target="_blank">【MySQL】表空间丢失处理(Tablespace is missing for table 错误处理)</a>
                              <span class="text-muted">m0_74824823</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/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                              <div>问题背景最近,我在运行一个基于Python爬虫的项目时,爬虫需要频繁与MySQL数据库交互。不幸的是,在数据爬取过程中,Windows系统突然强制更新并重启。这次意外中断导致MySQL数据库的三个表格(2022年、2023年和2024年的数据表)出现了“Tablespaceismissing”的错误。起初,我尝试了常规的CHECKTABLE和REPAIRTABLE方法,但这些都没有解决问题。最终,</div>
                          </li>
                          <li><a href="/article/1892537949245992960.htm"
                                 title="Python爬虫TLS" target="_blank">Python爬虫TLS</a>
                              <span class="text-muted">dme.</span>
      <a class="tag" taget="_blank" href="/search/Python%E7%88%AC%E8%99%AB%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Python爬虫零基础入门</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                              <div>TLS指纹校验原理和绕过浏览器可以正常访问,但是用requests发送请求失败。后端是如何监测得呢?为什么浏览器可以返回结果,而requests模块不行呢?https://cn.investing.com/equities/amazon-com-inc-historical-data1.指纹校验案例1.1案例:ascii2dhttps://ascii2d.net/importrequestsres</div>
                          </li>
                          <li><a href="/article/1892537066504384512.htm"
                                 title="python爬虫Selenium库详细教程_python爬虫之selenium库的使用详解" target="_blank">python爬虫Selenium库详细教程_python爬虫之selenium库的使用详解</a>
                              <span class="text-muted">嘻嘻哈哈学编程</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/selenium/1.htm">selenium</a>
                              <div>网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!2.2访问页面2.3查找元素2.3.1单个元素下面</div>
                          </li>
                          <li><a href="/article/1892512851331969024.htm"
                                 title="Python从0到100(三十九):数据提取之正则(文末免费送书)" target="_blank">Python从0到100(三十九):数据提取之正则(文末免费送书)</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/mysql/1.htm">mysql</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从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新</div>
                          </li>
                          <li><a href="/article/1892483583331856384.htm"
                                 title="Python 舆论风向分析爬虫:全流程数据获取、清洗与情感剖析" target="_blank">Python 舆论风向分析爬虫:全流程数据获取、清洗与情感剖析</a>
                              <span class="text-muted">西攻城狮北</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%88%98%E6%A1%88%E4%BE%8B/1.htm">实战案例</a>
                              <div>引言在当今信息爆炸的时代,互联网上充斥着海量的用户言论和观点。了解舆论风向对于企业、政府机构以及研究者等具有重要的意义,可以帮助他们及时把握公众情绪、调整策略与决策。Python作为一种强大的编程语言,在数据爬取与分析方面具有得天独厚的优势,能够助力我们高效地实现舆情监测与深入剖析。一、环境搭建与目标确定1.环境搭建为了顺利完成爬虫与数据分析任务,首先需要确保你的开发环境已经安装了以下Python</div>
                          </li>
                          <li><a href="/article/1892456456029007872.htm"
                                 title="Python爬虫requests(详细)" target="_blank">Python爬虫requests(详细)</a>
                              <span class="text-muted">dme.</span>
      <a class="tag" taget="_blank" href="/search/Python%E7%88%AC%E8%99%AB%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Python爬虫零基础入门</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                              <div>本文来学爬虫使用requests模块的常见操作。1.URL参数无论是在发送GET/POST请求时,网址URL都可能会携带参数,例如:http://www.5xclass.cn?age=19&name=dengres=requests.get(url="https://www.5xclass.cn?age=19&name=deng")res=requests.get(url="https://www</div>
                          </li>
                          <li><a href="/article/1892446997915430912.htm"
                                 title="Python中的 redis keyspace 通知_python 操作redis psubscribe(‘__keyspace@0__ ‘)" target="_blank">Python中的 redis keyspace 通知_python 操作redis psubscribe(‘__keyspace@0__ ‘)</a>
                              <span class="text-muted">2301_82243733</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/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                              <div>最后Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习Python门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的Pytho</div>
                          </li>
                          <li><a href="/article/1892349116927766528.htm"
                                 title="Selenium使用指南" target="_blank">Selenium使用指南</a>
                              <span class="text-muted">程序员杰哥</span>
      <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/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><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a><a class="tag" taget="_blank" href="/search/%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">功能测试</a>
                              <div>概述selenium是网页应用中最流行的自动化测试工具,可以用来做自动化测试或者浏览器爬虫等。官网地址为:相对于另外一款web自动化测试工具QTP来说有如下优点:免费开源轻量级,不同语言只需要一个体积很小的依赖包支持多种系统,包括Windows,Mac,Linux支持多种浏览器,包括Chrome,FireFox,IE,safari,opera等支持多语言,包括Java,C,python,c#等主流</div>
                          </li>
                          <li><a href="/article/1892348360938024960.htm"
                                 title="基于Python的搜索引擎的设计与实现" target="_blank">基于Python的搜索引擎的设计与实现</a>
                              <span class="text-muted">AI大模型应用之禅</span>
      <a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1/1.htm">R1</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%B8%8E%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">AI大模型与大数据</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/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                              <div>搜索引擎,Python,爬虫,自然语言处理,信息检索,索引,算法,数据库1.背景介绍在信息爆炸的时代,海量数据无处不在,高效地获取所需信息变得至关重要。搜索引擎作为信息获取的桥梁,扮演着不可或缺的角色。传统的搜索引擎往往依赖于庞大的服务器集群和复杂的算法,对资源消耗较大,且难以满足个性化搜索需求。基于Python的搜索引擎设计,则凭借Python语言的易学易用、丰富的第三方库和强大的社区支持,为开</div>
                          </li>
                          <li><a href="/article/1892340166937341952.htm"
                                 title="python进程数上限_python 多进程数量 对爬虫程序的影响" target="_blank">python进程数上限_python 多进程数量 对爬虫程序的影响</a>
                              <span class="text-muted">weixin_39759995</span>
      <a class="tag" taget="_blank" href="/search/python%E8%BF%9B%E7%A8%8B%E6%95%B0%E4%B8%8A%E9%99%90/1.htm">python进程数上限</a>
                              <div>1.首先看一下python多进程的优点和缺点多进程优点:1.稳定性好:多进程的优点是稳定性好,一个子进程崩溃了,不会影响主进程以及其余进程。基于这个特性,常常会用多进程来实现守护服务器的功能。然而多线程不足之处在于,任何一个线程崩溃都可能造成整个进程的崩溃,因为它们共享了进程的内存资源池。2.能充分利用多核cpu:由于python设计之初,没预料到多核cpu能够得到现在的发展,只考虑到了单核cpu</div>
                          </li>
                          <li><a href="/article/1892331846763606016.htm"
                                 title="python爬虫--安装XPath Helper" target="_blank">python爬虫--安装XPath Helper</a>
                              <span class="text-muted">S903784597</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>给chrome浏览器安装xpath插件。-从网盘下载xpath的插件文件链接:https://pan.baidu.com/s/1B85d5cLDyAz1xUQqmL3uug?pwd=3306提取码:3306-在chrome中输入chrome://extensions/打开扩展程序。-将从百度网盘中下载的xpath.zip文件直接拖到浏览器的扩展程序页面中-得到chrome插件,将插件开关开启,并且</div>
                          </li>
                          <li><a href="/article/1892316219466379264.htm"
                                 title="使用Python爬虫实时监控行业新闻案例" target="_blank">使用Python爬虫实时监控行业新闻案例</a>
                              <span class="text-muted">海拥✘</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                              <div>目录背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时监控某个行业的新闻,自动化抓取并定期输出这些新闻,Python爬虫可以帮你轻松实现这一目标。本文将通过一个案例,带你一步一步实现一个简单的Python爬虫</div>
                          </li>
                          <li><a href="/article/1892269295539384320.htm"
                                 title="Python爬虫-猫眼电影的影院数据" target="_blank">Python爬虫-猫眼电影的影院数据</a>
                              <span class="text-muted">写python的鑫哥</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E6%A1%88%E4%BE%8B1000%E8%AE%B2/1.htm">爬虫案例1000讲</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/%E7%8C%AB%E7%9C%BC/1.htm">猫眼</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%BD%B1/1.htm">电影</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%BD%B1%E9%99%A2/1.htm">电影院</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE/1.htm">数据</a><a class="tag" taget="_blank" href="/search/%E9%87%87%E9%9B%86/1.htm">采集</a>
                              <div>前言本文是该专栏的第46篇,后面会持续分享python爬虫干货知识,记得关注。本文笔者以猫眼电影为例子,获取猫眼的影院相关数据。废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码)正文地址:aHR0cHM6Ly93d3cubWFveWFuLmNvbS8=目标:获取猫眼电影的影院数据1.项目场景介绍老规矩,我们还是通过接码</div>
                          </li>
                          <li><a href="/article/1892256428417150976.htm"
                                 title="Python从0到100(四):Python中的运算符介绍(补充)" target="_blank">Python从0到100(四):Python中的运算符介绍(补充)</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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                              <div>前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新</div>
                          </li>
                          <li><a href="/article/1892256429172125696.htm"
                                 title="Python从0到100(三十五):beautifulsoup的学习" target="_blank">Python从0到100(三十五):beautifulsoup的学习</a>
                              <span class="text-muted">是Dream呀</span>
      <a class="tag" taget="_blank" href="/search/Dream%E7%9A%84%E8%8C%B6%E8%AF%9D%E4%BC%9A/1.htm">Dream的茶话会</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/beautifulsoup/1.htm">beautifulsoup</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                              <div>前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新</div>
                          </li>
                          <li><a href="/article/1892196639985168384.htm"
                                 title="python分布式爬虫去重_Python分布式爬虫(三) - 爬虫基础知识" target="_blank">python分布式爬虫去重_Python分布式爬虫(三) - 爬虫基础知识</a>
                              <span class="text-muted">weixin_39997311</span>
      <a class="tag" taget="_blank" href="/search/python%E5%88%86%E5%B8%83%E5%BC%8F%E7%88%AC%E8%99%AB%E5%8E%BB%E9%87%8D/1.htm">python分布式爬虫去重</a>
                              <div>0相关源码1技术选型爬虫能做什么1.1scrapyVSrequests+beautifulsoup做爬虫的时候,经常都会听到scrapyVSrequests+beautifulsoup的组合在本次分布式爬虫实现中只用scrapy而不用后者的原因是:requests和beautifulsoup都是库,scrapy是一个框架框架中可以应用requests等,可以集合很多第三方库基于twisted(异步</div>
                          </li>
                          <li><a href="/article/1892195882443534336.htm"
                                 title="Scrapy分布式爬虫系统" target="_blank">Scrapy分布式爬虫系统</a>
                              <span class="text-muted">ivwdcwso</span>
      <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</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/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a>
                              <div>一、概述在这篇博文中,我们将介绍如何使用Docker来部署Scrapy分布式爬虫系统,包括Scrapyd、Logparser和Scrapyweb三个核心组件。这种部署方式适用于Scrapy项目和Scrapy-Redis分布式爬虫项目。需要安装的组件:Scrapyd-服务端,用于运行打包后的爬虫代码,所有爬虫机器都需要安装。Logparser-服务端,用于解析爬虫日志,配合Scrapyweb进行实时</div>
                          </li>
                          <li><a href="/article/1892186799468507136.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/%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%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                              <div>引言在互联网时代,新闻媒体网站是人们获取信息和了解世界的重要渠道。随着新闻的即时更新,获取最新头条并进行数据分析成为许多行业领域(如媒体、广告、舆情监测等)的重要需求。通过抓取新闻媒体网站的内容,我们不仅能获取各类新闻文章,还能为后续的数据分析、情感分析、舆情监控等提供基础数据。本篇博客将详细讲解如何使用Python编写一个爬虫,抓取新闻媒体网站的最新头条及其相关内容。我们将使用最新的技术栈,包括</div>
                          </li>
                          <li><a href="/article/1892125650370752512.htm"
                                 title="Python爬虫实战:获取笔趣阁图书信息,并做数据分析" target="_blank">Python爬虫实战:获取笔趣阁图书信息,并做数据分析</a>
                              <span class="text-muted">ylfhpy</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/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>注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力!1.环境准备与反爬策略pythonimportrequestsfrombs4importBeautifulSoupimportpandasaspdimportreimporttimeimportrandomfromfake_useragentimportUserAgent#需安装:pip</div>
                          </li>
                          <li><a href="/article/1892090313263083520.htm"
                                 title="如何利用Python爬虫获取淘宝分类详情:实战案例指南" target="_blank">如何利用Python爬虫获取淘宝分类详情:实战案例指南</a>
                              <span class="text-muted">数据小爬虫@</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                              <div>在电商领域,淘宝作为中国最大的电商平台之一,其分类详情数据对于市场分析、竞争策略制定以及电商运营优化具有极高的价值。通过Python爬虫技术,我们可以高效地获取这些数据,为电商从业者提供强大的数据支持。本文将详细介绍如何利用Python编写爬虫程序,快速获取淘宝分类详情数据。一、准备工作(一)环境搭建确保你的开发环境中已经安装了以下必要的库:requests:用于发送HTTP请求。Beautifu</div>
                          </li>
                          <li><a href="/article/1892065588717613056.htm"
                                 title="Python 爬虫功能介绍" target="_blank">Python 爬虫功能介绍</a>
                              <span class="text-muted">chengxuyuan1213_</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/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a>
                              <div>在当今互联网信息爆炸的时代,数据的获取与分析成为了各行各业不可或缺的一部分。Python,作为一种简洁、易读且功能强大的编程语言,凭借其丰富的库和框架,在数据抓取(即网络爬虫)领域展现了极大的优势。本文旨在介绍Python爬虫的基础功能,帮助初学者快速入门,理解爬虫的基本工作原理及常用技术。一、什么是网络爬虫网络爬虫(WebCrawler),又称网络蜘蛛(WebSpider)或网络机器人(WebR</div>
                          </li>
                          <li><a href="/article/1892009610320080896.htm"
                                 title="Python爬虫+数据分析:京东商品评论数据接口" target="_blank">Python爬虫+数据分析:京东商品评论数据接口</a>
                              <span class="text-muted">代码逐梦人</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E6%8A%80%E8%83%BD%E6%99%8B%E5%8D%87%E8%B7%AF%E7%BA%BF/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/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                              <div>一、引言在电商领域,商品评论数据蕴含着丰富的信息,如消费者的满意度、产品的优缺点等。京东作为国内知名的电商平台,其商品评论数据对于商家进行市场调研、改进产品,以及消费者了解商品真实情况都具有重要价值。通过获取京东商品评论数据接口,我们可以方便、高效地获取这些有价值的信息,为后续的数据分析和决策提供支持。二、接口概述需要说明的是,京东并没有公开免费的商品评论数据接口供开发者随意使用。如果要获取京东商</div>
                          </li>
                          <li><a href="/article/1892009356183007232.htm"
                                 title="python爬虫多线程原理" target="_blank">python爬虫多线程原理</a>
                              <span class="text-muted">代码逐梦人</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E6%8A%80%E8%83%BD%E6%99%8B%E5%8D%87%E8%B7%AF%E7%BA%BF/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爬虫中,多线程是一种提升爬取效率的有效技术。在传统的单线程爬虫里,每次只能处理一个请求,只有等当前请求完成(包括发送请求、等待响应、解析数据)之后,才能开始下一个请求。而多线程爬虫可以让多个请求同时进行,在等待某个请求响应的时间里,CPU可以去处理其他请求,充分利用了CPU时间,大大提高了爬取效率。多线程爬虫的实现步骤1.引入必要的库importrequestsi</div>
                          </li>
                          <li><a href="/article/1892009356849901568.htm"
                                 title="Python爬虫+数据分析:淘宝商品评论页面数据" target="_blank">Python爬虫+数据分析:淘宝商品评论页面数据</a>
                              <span class="text-muted">代码逐梦人</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E6%8A%80%E8%83%BD%E6%99%8B%E5%8D%87%E8%B7%AF%E7%BA%BF/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/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                              <div>一、引言在电商平台中,商品评论包含了大量消费者的反馈信息,这些信息对于商家了解产品优缺点、改进服务,以及消费者做出购买决策都具有重要价值。淘宝作为国内知名的电商平台,其商品评论页面的数据蕴含着丰富的信息。通过Python爬虫技术获取这些数据,并运用数据分析方法进行处理和解读,可以挖掘出有价值的商业洞察。然而,需要注意的是,淘宝有严格的反爬机制,在进行爬虫操作时要遵守相关法律法规和平台规则,避免过度</div>
                          </li>
                          <li><a href="/article/1891974566327152640.htm"
                                 title="Python网络爬虫-WebSocket数据抓取" target="_blank">Python网络爬虫-WebSocket数据抓取</a>
                              <span class="text-muted">程序小勇</span>
      <a class="tag" taget="_blank" href="/search/faiss/1.htm">faiss</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                              <div>目录前言1、WebSocket请求的分析通常涉及以下几个方面:2、利用WebSocket爬取数据总结最后,创作不易!非常感谢大家的关注、点赞、评论啦!谢谢三连哦!好人好运连连,学习进步!工作顺利哦!博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,</div>
                          </li>
                          <li><a href="/article/1891930292613083136.htm"
                                 title="流行编程语言全解析:优势、应用与短板" target="_blank">流行编程语言全解析:优势、应用与短板</a>
                              <span class="text-muted">a小胡哦</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a><a class="tag" taget="_blank" href="/search/r%E8%AF%AD%E8%A8%80/1.htm">r语言</a>
                              <div>Python:优势Python以其简洁、易读的语法闻名,新手能快速上手。丰富的库和框架,能极大地提高开发效率。适用领域数据科学与分析:处理和分析大规模数据集,进行数据可视化。典型示例:Google用Python进行数据分析,处理海量数据以支持各种业务决策。机器学习与人工智能:构建和训练模型。典型示例:OpenAI在很多人工智能项目中广泛使用Python,如GPT系列模型的研发。网络爬虫:轻松从网页</div>
                          </li>
                          <li><a href="/article/1891903033600700416.htm"
                                 title="052_爬虫_爬虫相关概念(引用《尚硅谷Python爬虫教程(小)小 白零基础速通》052章)" target="_blank">052_爬虫_爬虫相关概念(引用《尚硅谷Python爬虫教程(小)小 白零基础速通》052章)</a>
                              <span class="text-muted">一个有趣的昵称</span>
      <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                              <div>爬虫解释:通过程序,根据url(http://taobao.com)进行网页的爬取获取有用的信息实用程序模拟浏览器,去向服务发送请求,获取响应信息爬虫的核心爬取网页:爬取整个网页包含了网页中所的内容解析数据:将网页中得到的数据进行解析难点:爬虫和但爬虫之间的博弈爬虫的类型实例通用爬虫百度,360,Google,搜狗等搜索引擎功能访问网页-》抓取数据-》数据储存-》数据处理-》提供检索服务robot</div>
                          </li>
                          <li><a href="/article/1891899750693793792.htm"
                                 title="尚硅谷爬虫note007" target="_blank">尚硅谷爬虫note007</a>
                              <span class="text-muted">CSDNy666999</span>
      <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                              <div>一、urllib—异常1.urllib.error.HTTPError2.urllib.error.URLError#_*_coding:utf-8_*_#@Time:2025/2/1411:33#@Author:20250206-里奥#@File:demo26_异常#@Project:PythonProject10-14importurllib.requestimporturllib.error</div>
                          </li>
                          <li><a href="/article/1891820495158964224.htm"
                                 title="【Python爬虫(15)】从0到1:Python爬虫实战攻克电商网站动态数据堡垒" target="_blank">【Python爬虫(15)】从0到1:Python爬虫实战攻克电商网站动态数据堡垒</a>
                              <span class="text-muted">奔跑吧邓邓子</span>
      <a class="tag" taget="_blank" href="/search/Python%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/%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/%E7%94%B5%E5%95%86%E7%BD%91%E7%AB%99/1.htm">电商网站</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E6%95%B0%E6%8D%AE/1.htm">动态数据</a>
                              <div>【Python爬虫】专栏简介:本专栏是Python爬虫领域的集大成之作,共100章节。从Python基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。目录一、引言二、准备工作2.1环境搭建2.2目标电商网站分析三、攻克登</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>