scrapy框架_Scrapy爬虫框架总结入门篇

scrapy框架_Scrapy爬虫框架总结入门篇_第1张图片

点击上方「蓝字」关注 testing

c83634a3d744fc2b5af6e9cdb752f78e.png


 01 

引言

hello,好久不见!最近接了几个兼职,然后都涉及到了爬虫,在这里简单介绍下Scrapy框架的使用。

那么,爬虫除了Scrapy框架外,还有pyspider框架,当然了,也可以利用基础去实现这些框架的功能。为什么这里单单就介绍Scrapy框架呢?

我们来说说pyspider框架。我们可以利用pyspider框架可以快速的完成爬虫的编写。除了快捷性外,pyspider也有一些缺点,比如可配置化程度不高,异常处理能力有限等。它对于一些反爬程度非常强的网站爬取显得力不从心。

而Scrapy框架的功能是非常强大的,爬取效率高,扩展组件多。可配置和可扩展程度相对来说是非常高的,Scrapy几乎可以应对所有反爬网站,它是目前 Python使用最广泛的爬虫框架。

说到这里,就知道testing为什么单独介绍Scrapy框架了吧!对pyspider有兴趣的也可以自己百度了解下。下面进入正题~


 02 

Scrapy介绍

Scrapy是基于Twisted的异步处理框架,是纯Python实现的爬虫框架,Scrapy的架构清晰,模块之间的耦合程度低,可扩展性极强。可以灵活完成各种需求, 我们只需要定制开发几个模块就可以轻松实现一个爬虫。

下面我们来看看Scrapy框架的架构图

scrapy框架_Scrapy爬虫框架总结入门篇_第2张图片

Engine引擎:处理整个系统的数据流处理、触发事务,是整个框架的核心。

Item:项它定义了爬取结果的数据结构,爬取的数据会被赋值成该Item对象。

Scheduler调度器:接受引擎发过来的请求并将其加入队列中,在引擎再次请求的时候将请求提供给引擎。

Downloader下载器:下载网页内容,并将网页内容返回给蜘蛛。

Spiders蜘蛛:其内定义了爬取的逻辑和网页的解析规则 ,它主要负责解析响应并生成提取结果和新的请求。

Item Pipeline项目管道:负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据。

Downloader Middlewares下载器中间件:位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应。

Spider Middlewares蜘蛛中间件:位于引擎和蜘蛛 之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果及新的请求。

我们可以根据上面图来看看Scrapy的详细数据流走向。

1、爬虫引擎获得初始请求开始抓取。

2、爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取。

3、爬虫调度器返回下一个请求给爬虫引擎。

4、引擎请求发送到下载器,通过下载中间件下载网络数据。

5、一旦下载器完成页面下载,将下载结果返回给爬虫引擎。

6、引擎将下载器的响应通过中间件返回给爬虫进行处理。

7、爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎。

8、引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。

9、重复该过程(继续步骤1),直到爬取完所有的url请求。

通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持, Scrapy最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。

 03 

Scrapy入门

创建项目及Spider

接下来,以某家五和地铁站附近租房房源为例说明Scrapy的使用。

Scrapy框架是通过命令行来创建项目的,代码编写还是需要IDE。下面,我们来创建下项目

scrapy startproject scrapy_test    # scrapy-test为项目名D:\Python\WorkingInterval>scrapy startproject scrapy_testNew Scrapy project 'scrapy_test', using template directory 'd:\python\python37\lib\site-packages\scrapy\templates\project', created in:    D:\Python\WorkingInterval\scrapy_testYou can start your first spider with:    cd scrapy_test    scrapy genspider example example.com

scrapy框架_Scrapy爬虫框架总结入门篇_第3张图片

创建项目后用IDE打开项目,我们发现Scrapy的项目结构是这样的,下面介绍下Scrapy的项目结构:

scrapy.cfg:Scrapy项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。

items.py:定义 Item 数据结构,所有的Item的定义都可以放这里。

pipelines.py:定义了Item Pipeline的实现,所有的Item Pipeline的实现都可以放这里。

settings.py:定义项目的全局配置。

middlewares.py:定义Spider Middlewares和Downloader Middlewares的实现。

spiders:包含一个个Spider的实现,每个Spider都有一个文件。

好了,接下来创建项目完了后需要创建Spider。Spider是自己定义的类,Scrapy用它来从网页里抓取内容,并解析抓取的结果。不过这个类必须继承Scrapy提供的Spider类scrapy.Spider,还要定义Spider 的名称和起始请求,以及怎样处理爬取后的结果的方法。

当然了,也可以使用命令行创建一个Spider。比如要生成testing这个Spider,可以执行下面命令:

cd scrapy_testscrapy genspider testing(Spider名) sz.lianjia.com(域名)   #创建一个Spid

创建成功后我们看看spiders中有什么变化,spiders中多了一个spider(testing.py)。它就是刚刚创建的 Spider。内容如下所示:

# -*- coding: utf-8 -*-import scrapyclass TestingSpider(scrapy.Spider):    name = 'testing'    allowed_domains = ['sz.lianjia.com']    start_urls = ['http://sz.lianjia.com/']    def parse(self, response):        pass

我们发现,在Spider(testing.py)文件中有3个属性及1个方法。那么,这3个属性及1个方法表示什么呢?

name:每个项目唯一的名字,用来区分不同的Spiderallowed_domains:允许爬取的域名,如果初始或后续的请求链接不是这个域名下的,则请求链接会被过滤start_urls:包含了Spider在启动时爬取的url列表,初始请求是由它来定义的parse:Spider的一个方法,默认情况下,被调用时 start_urls 里面的链接构成的请求完成下载执行后,返回的响应就会作为唯一的参数传递给这个函数 该方法负责解析返回的响应、提取数据或者进一步生成要处理的请求。

其实,这个Spider(testing.py)我们现在就可以运行了,我们可以通过scrapy crawl Spider_name去运行一个Spider。我们来看看效果:

# Spider代码# -*- coding: utf-8 -*-import scrapyclass TestingSpider(scrapy.Spider):    name = 'testing'    allowed_domains = ['sz.lianjia.com']    start_urls = ['https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/']    def parse(self, response):        print(response.text)
scrapy crawl testing   # 运行Spider,testing为Spider
# 结果,只截取了部分2020-10-08 21:28:52 [scrapy.utils.log] INFO: Scrapy 2.3.0 started (bot: scrapy_test)2020-10-08 21:28:52 [scrapy.utils.log] INFO: Versions: lxml 4.5.2.0, libxml2 2.9.5, cssselect 1.1.0, parsel 1.6.0, w3lib 1.22.0, Twisted 20.3.0, Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)], pyOpenSSL 19.1.0 (OpenSSL 1.1.1h  22 Sep 2020), cryptography 3.1.1, Platform Windows-10-10.0.19041-SP02020-10-08 21:28:52 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor2020-10-08 21:28:52 [scrapy.crawler] INFO: Overridden settings:{'BOT_NAME': 'scrapy_test', 'NEWSPIDER_MODULE': 'scrapy_test.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['scrapy_test.spiders']}2020-10-08 21:28:52 [scrapy.extensions.telnet] INFO: Telnet Password: 503fe683dbe0c5282020-10-08 21:28:52 [scrapy.middleware] INFO: Enabled extensions:['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.logstats.LogStats']2020-10-08 21:28:52 [scrapy.middleware] INFO: Enabled downloader middlewares:['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats']2020-10-08 21:28:52 [scrapy.middleware] INFO: Enabled spider middlewares:['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware']2020-10-08 21:28:52 [scrapy.middleware] INFO: Enabled item pipelines:[]2020-10-08 21:28:52 [scrapy.core.engine] INFO: Spider opened2020-10-08 21:28:52 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)2020-10-08 21:28:52 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:60232020-10-08 21:28:53 [scrapy.core.engine] DEBUG: Crawled (200)  (referer: None)2020-10-08 21:28:53 [scrapy.core.engine] DEBUG: Crawled (200)  (referer: None)                        深圳租房信息_深圳出租房源|房屋出租价格【深圳贝壳租房】title></code></pre> 
    <p>我们可以看到上面是把整个网页都爬下来了。那么,我们怎么爬我想要爬的呢?爬下来之后我又该怎么保存呢?接下来介绍下Item及怎么解析response。</p> 
    <h2></h2> 
    <p>Item</p> 
    <p><strong></strong>Item 是保存爬取数据的容器,它的使用方法和字典类似;不过,相比字典, Item 多了额外的保护机制,可以避免拼写错误或者定义字段错误。</p> 
    <p>创建 Item需要继承scrapy.Item 类,并且定义类型为scrapy.Field的字段。我们来观察目标网站,我们可以获取到到内容有标题、标签、图片、价格,分别定义为:title、label、picture、price。</p> 
    <p><a href="http://img.e-com-net.com/image/info8/3bdc29de1af24bdf964e35a06f4b26c7.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/3bdc29de1af24bdf964e35a06f4b26c7.jpg" alt="scrapy框架_Scrapy爬虫框架总结入门篇_第4张图片" width="650" height="321" style="border:1px solid black;"></a></p> 
    <p>定义Item ,此时将items.py修改如下:</p> 
    <pre class="has"><code># -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass ScrapyTestItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()    title = scrapy.Field()   # 标题    label = scrapy.Field()   # 标签    picture = scrapy.Field()  # 图片    price = scrapy.Field()   # 价格</code></pre> 接下来爬取时我们会使用到这个 Item 
    <h2></h2> 
    <p>response解析</p> 
    <p><strong></strong>在前面Spider提到过,Spider(testing.py)文件中有一个parse方法。方法中默认有一个resposne的参数。resposne就是start_urls列表里面的链接爬取后的结果。所以在parse方法中,我们可以直接对response变量包含的内容进行解析,我们可以浏览请求结果的网页源代码及进一步解析源代码内容,拿到我们想要的数据。</p> 那么,我们现在来看看我们需要提取的内容,也就是html文件源码。 
    <p><a href="http://img.e-com-net.com/image/info8/825dbeab53194bbfbfdb01b2479f2b71.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/825dbeab53194bbfbfdb01b2479f2b71.jpg" alt="scrapy框架_Scrapy爬虫框架总结入门篇_第5张图片" width="650" height="321" style="border:1px solid black;"></a></p> 
    <p>F12打开开发者模式进行元素定位,发现房源列表都在下面这个标签下:</p> 
    <pre class="has"><code></code></pre> 
    <div> 
     <code>class="content w1150" id="content"><code># 接下来我们就可以进入这个标签下,然后提取到</code></code> 
     <div> 
      <code><code>class="content__list">节点下的每个房源的title、label、picture、pric</code></code> 
      <p><code><code>那么,具体怎么提呢?我们可以选择使用CSS或者Xpath提取,具体如下:</code></code></p> 
      <code><code></code></code> 
      <pre class="has"><code><code><code># -*- coding: utf-8 -*-import scrapyclass TestingSpider(scrapy.Spider):    name = 'testing'    allowed_domains = ['sz.lianjia.com']    start_urls = ['https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/']    def parse(self, response):        picture_url = 'https://sz.lianjia.com'        for contents in response.css('.content.w1150'):            for content_list in contents.css('.content__list'):                for content in content_list.css('.content__list--item'):                    print(content.css('.content__list--item--aside::attr(title)').extract_first())                    print(picture_url + str(content.css('.content__list--item--aside::attr(href)').extract_first()))                    for label_list in content.css('.content__list--item--main'):                        print(label_list.css('.content__list--item--des a::text').extract_first())                        print(label_list.css('.content__list--item-price em::text').extract_first())</code></code></code></pre> 
      <code><code>这里利用了css选择器选取所有的contents然后依次往下循环,最后拿到房源列表。拿到房源列表后在取对应的字段值。其实和下面代码一样直接拿到房源列表也是可以的,我这里采用先取最外层元素的方式是为了更任意理解。</code></code> 
      <pre class="has"><code><code><code># -*- coding: utf-8 -*-import scrapyclass TestingSpider(scrapy.Spider):    name = 'testing'    allowed_domains = ['sz.lianjia.com']    start_urls = ['https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/']    def parse(self, response):        picture_url = 'https://sz.lianjia.com'        # 获取content__list--item节点下的全部标签,返回scrapy.selector.unified.Selector类型                for content in content_list.css('.content__list--item'):                    # 获取content__list--item--aside中的title属性。::后面是方法,属性是想获取的页面属性key,如title、href等                    # content.css('.content__list--item--aside::attr(title)')返回的是一个列表,所以还需要extract_first()方法                    # 获取第一个元素,如果需要获取所有标签可使用extract()方法                    print(content.css('.content__list--item--aside::attr(title)').extract_first())                    print(picture_url + str(content.css('.content__list--item--aside::attr(href)').extract_first()))                    for label_list in content.css('.content__list--item--main'):                        # 获取content__list--item--des标签节点下a标签的文本值,如:                        # <em>3500</em> 元/月                        # label_list.css('.content__list--item-price em::text').extract_first()取出来的值就是3500                        print(label_list.css('.content__list--item--des a::text').extract_first())                        print(label_list.css('.content__list--item-price em::text').extract_first())        </code></code></code></pre> 
      <code><code></code></code> 
      <h2><code><code></code></code></h2> 
      <code><code></code></code> 
      <p><code><code>使用item</code></code></p> 
      <code><code></code></code> 
      <p><code><code>写好之后我们来运行一下,使用print打印出来发现结果是:</code></code></p> 
      <code><code></code></code> 
      <pre class="has"><code><code><code>整租·泓瀚苑 2室1厅 东南https://sz.lianjia.com/zufang/SZ2399746901261164544.html龙岗区3500整租·佳华领汇广场king公馆 1室1厅 东南https://sz.lianjia.com/zufang/SZ2493457203546570752.html龙岗区4500整租·绿怡居 1室1厅 北https://sz.lianjia.com/zufang/SZ2529042762431733760.html龙岗区3500整租·祥龙花园 1室1厅 南https://sz.lianjia.com/zufang/SZ2579510967029202944.html龙岗区1600整租·阳明公寓 2室1厅 西北https://sz.lianjia.com/zufang/SZ2546299208399323136.html龙岗区3600整租·万家华庭 1室0厅 南https://sz.lianjia.com/zufang/SZ2601424595965976576.html龙岗区1600整租·德润荣君府 1室1厅 西南https://sz.lianjia.com/zufang/SZ2557857645281419264.html龙岗区3500整租·佳华领汇广场king公馆 1室1厅 复式 东https://sz.lianjia.com/zufang/SZ2565981889160814592.html龙岗区4200# 上面结果只截取了一部分</code></code></code></pre> 
      <code><code></code></code> 
      <p><code><code>上文定义了 Item ,接下来就要使用它了。Item 可以理解为一个字典,我们在声明时需要实例化。然后用刚刚解析出来的数据赋给对应item的每一个字段,然后yield返回即可。代码如下:</code></code></p> 
      <code><code></code></code> 
      <pre class="has"><code><code><code># -*- coding: utf-8 -*-import scrapyfrom scrapy_test.items import ScrapyTestItemclass TestingSpider(scrapy.Spider):    name = 'testing'    allowed_domains = ['sz.lianjia.com']    start_urls = ['https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/']    def parse(self, response):        picture_url = 'https://sz.lianjia.com'        for contents in response.css('.content.w1150'):            for content_list in contents.css('.content__list'):                # 获取content__list--item节点下的全部标签,返回scrapy.selector.unified.Selector类型                for content in content_list.css('.content__list--item'):                    item = ScrapyTestItem()                    # 获取content__list--item--aside中的title属性。::后面是方法,属性是想获取的页面属性key,如title、href等                    # content.css('.content__list--item--aside::attr(title)')返回的是一个列表,所以还需要extract_first()方法                    # 获取第一个元素,如果需要获取所有标签可使用extract()方法                    item['title'] = content.css('.content__list--item--aside::attr(title)').extract_first()                    item['picture'] = picture_url + str(content.css('.content__list--item--aside::attr(href)').extract_first())                    for label_list in content.css('.content__list--item--main'):                        # 获取content__list--item--des标签节点下a标签的文本值,如:                        # <em>3500</em> 元/月                        # label_list.css('.content__list--item-price em::text').extract_first()取出来的值就是3500                        item['label'] = label_list.css('.content__list--item--des a::text').extract_first()                        item['price'] = label_list.css('.content__list--item-price em::text').extract_first()</code></code></code></pre> 
      <code><code></code></code> 
      <p><code><code>这样item就封装完成了。那么,我们来看看结果。</code></code></p> 
      <code><code></code></code> 
      <pre class="has"><code><code><code>2020-10-11 13:15:48 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2272373282206384128.html', 'price': '2160', 'title': '合租·信义嘉御山 5居室 东卧'}2020-10-11 13:15:48 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2203357333265063936.html', 'price': '1530', 'title': '合租·富豪花园 3居室 南卧'}</code></code></code></pre> 
      <code><code></code></code> 
      <p><code><code>在爬取网页的时候肯定不止一页内容,肯定有很多页内容。那么,我们怎么爬取下一页内容呢?下面我们说一说scrapy的Request方法。</code></code></p> 
      <code><code></code></code> 
      <h2><code><code></code></code></h2> 
      <code><code></code></code> 
      <p><code><code>scrapy.Request方法</code></code></p> 
      <code><code></code></code> 
      <p><code><code>完整代码:</code></code></p> 
      <code><code></code></code> 
      <pre class="has"><code><code><code># -*- coding: utf-8 -*-import scrapyfrom scrapy_test.items import ScrapyTestItemclass TestingSpider(scrapy.Spider):    name = 'testing'    allowed_domains = ['sz.lianjia.com']    start_urls = ['https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/']    def parse(self, response):        picture_url = 'https://sz.lianjia.com'        for contents in response.css('.content.w1150'):            for content_list in contents.css('.content__list'):                # 获取content__list--item节点下的全部标签,返回scrapy.selector.unified.Selector类型                for content in content_list.css('.content__list--item'):                    item = ScrapyTestItem()                    # 获取content__list--item--aside中的title属性。::后面是方法,属性是想获取的页面属性key,如title、href等                    # content.css('.content__list--item--aside::attr(title)')返回的是一个列表,所以还需要extract_first()方法                    # 获取第一个元素,如果需要获取所有标签可使用extract()方法                    item['title'] = content.css('.content__list--item--aside::attr(title)').extract_first()                    item['picture'] = picture_url + str(content.css('.content__list--item--aside::attr(href)').extract_first())                    for label_list in content.css('.content__list--item--main'):                        # 获取content__list--item--des标签节点下a标签的文本值,如:                        # <em>3500</em> 元/月                        # label_list.css('.content__list--item-price em::text').extract_first()取出来的值就是3500                        item['label'] = label_list.css('.content__list--item--des a::text').extract_first()                        item['price'] = label_list.css('.content__list--item-price em::text').extract_first()                    yield item        url = response.css('.content__pg .next::attr(href)').extract_first()        url = response.urljoin(url)        # scrapy.Request有二个参数,通过 url callback 构造一个新的请求,callback表示回调函数,这里还是使用 parse()        # 方法。当运行yield scrapy.Request(url=url, callback=self.parse)时,响应会重新经过parse方法处理,得        # 到第二页的解析结果,然后爬取下一页的数据。这样脚本就进入了一个循环,会爬到最后一页才结束        yield scrapy.Request(url=url, callback=self.parse)</code></code></code></pre> 
      <code><code></code></code> 
      <h2><code><code></code></code></h2> 
      <code><code></code></code> 
      <p><code><code>结语</code></code></p> 
      <code><code><strong></strong>接下来,我们一个简单的爬虫脚本就完成。我们 来运行一下看看</code></code> 
      <pre class="has"><code><code><code>2020-10-11 13:22:47 [scrapy.utils.log] INFO: Scrapy 2.3.0 started (bot: scrapy_test)2020-10-11 13:22:47 [scrapy.utils.log] INFO: Versions: lxml 4.5.2.0, libxml2 2.9.5, cssselect 1.1.0, parsel 1.6.0, w3lib 1.22.0, Twisted 20.3.0, Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)], pyOpenSSL 19.1.0 (OpenSSL 1.1.1h  22 Sep 2020), cryptography 3.1.1, Platform Windows-10-10.0.19041-SP02020-10-11 13:22:47 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor2020-10-11 13:22:47 [scrapy.crawler] INFO: Overridden settings:{
          'BOT_NAME': 'scrapy_test', 'NEWSPIDER_MODULE': 'scrapy_test.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['scrapy_test.spiders']}2020-10-11 13:22:47 [scrapy.extensions.telnet] INFO: Telnet Password: 4562180fedffa7842020-10-11 13:22:47 [scrapy.middleware] INFO: Enabled extensions:['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.logstats.LogStats']2020-10-11 13:22:47 [scrapy.middleware] INFO: Enabled downloader middlewares:['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats']2020-10-11 13:22:47 [scrapy.middleware] INFO: Enabled spider middlewares:['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware']2020-10-11 13:22:47 [scrapy.middleware] INFO: Enabled item pipelines:[]2020-10-11 13:22:47 [scrapy.core.engine] INFO: Spider opened2020-10-11 13:22:47 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)2020-10-11 13:22:47 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:60232020-10-11 13:22:48 [scrapy.core.engine] DEBUG: Crawled (200) //sz.lianjia.com/robots.txt> (referer: None)2020-10-11 13:22:48 [scrapy.core.engine] DEBUG: Crawled (200) //sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/> (referer: None)2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2399746901261164544.html', 'price': '3500', 'title': '整租·泓瀚苑 2室1厅 东南'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2558567086729740288.html', 'price': '2650', 'title': '整租·星窝青年创享社区(五和店) 1室1厅 东/东南/南'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2529042762431733760.html', 'price': '3500', 'title': '整租·绿怡居 1室1厅 北'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2557769429706883072.html', 'price': '2150', 'title': '整租·星窝青年创享社区(五和店) 1室1厅 东'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2546299208399323136.html', 'price': '3600', 'title': '整租·阳明公寓 2室1厅 西北'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2558648762940014592.html', 'price': '1980', 'title': '整租·星窝青年创享社区(五和店) 1室1厅 南'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2557857645281419264.html', 'price': '3500', 'title': '整租·德润荣君府 1室1厅 西南'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2565981889160814592.html', 'price': '4200', 'title': '整租·佳华领汇广场king公馆 1室1厅 复式 东'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2357150381735690240.html', 'price': '4300', 'title': '整租·佳华领汇广场king公馆 1室1厅 东'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2502001268382236672.html', 'price': '4800', 'title': '整租·润创兴时代公寓 2室1厅 南'}2020-10-11 13:22:49 [scrapy.core.scraper] DEBUG: Scraped from <200 https://sz.lianjia.com/zufang/rs%E4%BA%94%E5%92%8C/>{
          'label': '龙岗区', 'picture': 'https://sz.lianjia.com/zufang/SZ2561359607196811264.html', 'price': '7000', 'title': '整租·万科四季花城六期 3室2厅 南'}</code></code></code></pre> 
      <code><code>好了,因为时间问题,关于scrapy框架的内容本篇文章就说到这里。下期在说爬取后数据的保存及scrapy框架各组件的一个使用,886~</code></code> 
      <p><code><code><strong><strong> 04 </strong></strong></code></code></p> 
      <code><code></code></code> 
      <p><code><code><strong><strong>番外-往期推荐</strong></strong></code></code></p> 
      <code><code></code></code> 
      <p><code><code>性能测试系列:聊一聊性能测试、聊一聊性能测试指标一、聊一聊性能测试指标二、聊一聊性能测试计划、聊一聊性能测试方案</code></code></p> 
      <code><code></code></code> 
      <p><code><code>grafana系列:基于Docker搭建Grafana监控数据库资源、基于Docker搭建Grafana监控Linux服务器资源</code></code></p> 
      <code><code></code></code> 
      <p><code><code>docker系列:docker介绍、docker入门及使用、docker深入一</code></code></p> 
      <code><code></code></code> 
      <p><code><code>2T免费学习资源:2T免费各领域学习资源</code></code></p> 
      <code><code><a href="http://img.e-com-net.com/image/info8/4d7acf33a67c441e90f5ebf4838910dd.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4d7acf33a67c441e90f5ebf4838910dd.jpg" alt="scrapy框架_Scrapy爬虫框架总结入门篇_第6张图片" width="650" height="171" style="border:1px solid black;"></a></code></code> 
      <p><code><code><a href="http://img.e-com-net.com/image/info8/724ff66197c4483880ddcaf8722640a1.gif" target="_blank"><img src="http://img.e-com-net.com/image/info8/724ff66197c4483880ddcaf8722640a1.gif" alt="scrapy框架_Scrapy爬虫框架总结入门篇_第7张图片" width="639" height="272" style="border:1px solid black;"></a><strong></strong></code></code></p> 
      <code><code> </code></code> 
     </div> 
     <code><code> </code></code> 
    </div> 
    <code></code> 
   </div> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1387657889824460800"></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">你可能感兴趣的:(scrapy框架,scrapy爬虫)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1891570599508111360.htm"
                           title="爬虫实践——selenium、bs4" target="_blank">爬虫实践——selenium、bs4</a>
                        <span class="text-muted">lucky_chaichai</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/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/requests/1.htm">requests</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><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>目录一、浏览器的一般设置二、打开网页并获取网页源码的方式1、基于requests库2、基于urlib库3、基于selenium三、HTML解析1、BeautifulSoup2、Selenium动态渲染爬虫:模拟动态操作网页,加载JS(webdriver)3、scrapy框架四、反爬虫操作五、一些常见的异常处理六、url接口调用问题——get、post操作1、get请求2、post请求fromsel</div>
                    </li>
                    <li><a href="/article/1891088237292744704.htm"
                           title="第一天:爬虫介绍" target="_blank">第一天:爬虫介绍</a>
                        <span class="text-muted">朱剑君</span>
<a class="tag" taget="_blank" href="/search/Python%E7%88%AC%E8%99%AB%E8%AE%AD%E7%BB%83%E8%90%A5/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>每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中,对于爬虫有兴趣的伙伴可以订阅专栏一起学习,完全免费。键盘为桨,代码作帆。这趟为期30天左右的Python爬虫特训即将启航,每日解锁新海域:从Requests库的浪花到Scrapy框架的深流,从反爬迷雾中的破局到数据清洗的澄澈。我们拆解网页结构如同解读星图,让XPath与正则表达式化作导航罗盘。每个深夜的代码调试,终将凝结成破晓时的</div>
                    </li>
                    <li><a href="/article/1891088111056777216.htm"
                           title="第三天:爬取数据-urllib库." target="_blank">第三天:爬取数据-urllib库.</a>
                        <span class="text-muted">朱剑君</span>
<a class="tag" taget="_blank" href="/search/Python%E7%88%AC%E8%99%AB%E8%AE%AD%E7%BB%83%E8%90%A5/1.htm">Python爬虫训练营</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中,对于爬虫有兴趣的伙伴可以订阅专栏一起学习,完全免费。键盘为桨,代码作帆。这趟为期30天左右的Python爬虫特训即将启航,每日解锁新海域:从Requests库的浪花到Scrapy框架的深流,从反爬迷雾中的破局到数据清洗的澄澈。我们拆解网页结构如同解读星图,让XPath与正则表达式化作导航罗盘。每个深夜的代码调试,终将凝结成破晓时的</div>
                    </li>
                    <li><a href="/article/1890015117844738048.htm"
                           title="python爬虫6个经典常用案例(完整代码)" target="_blank">python爬虫6个经典常用案例(完整代码)</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a>
                        <div>文章目录1.抓取静态网页内容2.抓取多个网页(分页)3.使用正则表达式提取数据4.处理动态内容(使用Selenium)5.抓取带有登录认证的网页6.使用Scrapy框架Python爬虫是一种强大的工具,可以用来从网页中提取数据。以下是六个常用的Python爬虫案例,涵盖了从简单的网页抓取到更复杂的动态内容抓取。1.抓取静态网页内容目标:抓取一个静态网页的内容,并提取其中的特定信息。示例:抓取一个新</div>
                    </li>
                    <li><a href="/article/1889698000339529728.htm"
                           title="scrapy爬虫使用undetected_chromedriver登录总是失败" target="_blank">scrapy爬虫使用undetected_chromedriver登录总是失败</a>
                        <span class="text-muted">叨叨爱码字</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>Scrapy是一个优秀的爬虫框架,但是它本身不支持直接使用undetected_chromedriver。undetected_chromedriver是一个Python库,它可以用来绕过网站对SeleniumWebDriver的检测,但是它并不是Scrapy的一部分。如果你想在Scrapy中使用undetected_chromedriver,你需要自己编写中间件来实现这个功能。这可能需要一些额外</div>
                    </li>
                    <li><a href="/article/1889515570731216896.htm"
                           title="python爬虫---MongoDB保存爬取的数据" target="_blank">python爬虫---MongoDB保存爬取的数据</a>
                        <span class="text-muted">他是只猫</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6python%E7%88%AC%E8%99%AB%E4%B8%8E%E5%AE%9E%E8%B7%B5/1.htm">学python爬虫与实践</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>python爬虫scrapy爬虫博客文章,本文章主要是补充爬虫数据的保存。scrapy爬虫流程可以参考一下博文。https://blog.csdn.net/suwuzs/article/details/118091474以下是对pipelines.py文件写入代码一、对items进行处理MyspiderPipeline这个类是对爬取的数据进行处理,对于较长的数据进行一个缩略。importpymon</div>
                    </li>
                    <li><a href="/article/1888190787489951744.htm"
                           title="Scrapy 爬虫超时问题的解决方案" target="_blank">Scrapy 爬虫超时问题的解决方案</a>
                        <span class="text-muted">杨胜增</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>Scrapy爬虫超时问题的解决方案在使用Scrapy进行网络爬虫开发时,经常会遇到各种问题,其中超时问题是一个比较常见的问题。超时问题会导致爬虫无法正常抓取数据,影响爬虫的效率和稳定性。本文将详细介绍Scrapy爬虫超时问题的原因及解决方案。问题描述在运行Scrapy爬虫时,可能会遇到以下类似的错误信息:twisted.internet.error.TimeoutError:Usertimeout</div>
                    </li>
                    <li><a href="/article/1887943924971008000.htm"
                           title="Scrapy框架爬虫教程——入门篇" target="_blank">Scrapy框架爬虫教程——入门篇</a>
                        <span class="text-muted">杨胜增</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>Scrapy框架爬虫教程——入门篇目录大纲:1.什么是Scrapy框架?1.1Scrapy简介爬虫框架的定义与作用为什么选择Scrapy?与其他爬虫框架(如BeautifulSoup、Selenium等)的对比1.2Scrapy的优势高效的网络请求处理灵活的爬取策略强大的数据处理功能内置的分布式爬虫支持2.安装与环境搭建2.1安装Python及相关工具安装Python及版本要求推荐使用的开发环境(</div>
                    </li>
                    <li><a href="/article/1887943925478518784.htm"
                           title="1. 什么是Scrapy框架?" target="_blank">1. 什么是Scrapy框架?</a>
                        <span class="text-muted">杨胜增</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>1.什么是Scrapy框架?1.1Scrapy简介爬虫框架的定义与作用在网络数据采集的过程中,爬虫(Spider)是用来从网页上抓取信息的程序。爬虫框架则是一个封装了网络请求、数据提取、存储等功能的工具集,帮助开发者更高效、简便地完成爬虫的开发。Scrapy是一个流行的Python爬虫框架,它以高效、灵活和易扩展的特点,被广泛应用于数据抓取、网页爬取、信息抽取等多个领域。Scrapy作为一个开源框</div>
                    </li>
                    <li><a href="/article/1887943926069915648.htm"
                           title="4. 编写你的第一个Scrapy爬虫" target="_blank">4. 编写你的第一个Scrapy爬虫</a>
                        <span class="text-muted">杨胜增</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>4.编写你的第一个Scrapy爬虫在本篇文章中,我们将开始编写一个简单的Scrapy爬虫,帮助你理解如何从一个网站抓取数据。我们将通过一个实际的例子,演示如何创建一个Scrapy爬虫,从目标网页获取信息,并将其保存到本地。4.1Scrapy爬虫的基本构成Scrapy爬虫的基本构成很简单,通常包含以下几个关键部分:name:爬虫的名字,用于在运行时识别。start_urls:起始的URL列表,爬虫从</div>
                    </li>
                    <li><a href="/article/1887943927626002432.htm"
                           title="Scrapy框架爬虫深入解析:动态网页处理与性能优化" target="_blank">Scrapy框架爬虫深入解析:动态网页处理与性能优化</a>
                        <span class="text-muted">杨胜增</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>Scrapy框架爬虫深入解析:动态网页处理与性能优化Scrapy-Splash与动态网页处理安装与配置Scrapy-Splash是一个用于处理动态网页的Scrapy组件,它通过使用Splash来渲染动态网页,从而解决JavaScript动态加载的问题。首先,我们需要安装Scrapy-Splash:bash复制pipinstallscrapy-splash接下来,我们需要在settings.py文件</div>
                    </li>
                    <li><a href="/article/1886721523708915712.htm"
                           title="【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程" target="_blank">【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程</a>
                        <span class="text-muted">web15085096641</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a>
                        <div>前言在大数据和网络爬虫领域,Scrapy是一个功能强大且广泛使用的开源爬虫框架。它能够帮助我们快速地构建爬虫项目,并高效地从各种网站中提取数据。在本篇文章中,我将带大家从零开始使用Scrapy框架,构建一个简单的爬虫项目,爬取豆瓣电影Top250的电影信息。Scrapy官方文档:ScrapyDocumentation豆瓣电影Top250:豆瓣电影Top250本文的爬虫项目配置如下:系统:Windo</div>
                    </li>
                    <li><a href="/article/1884550827759169536.htm"
                           title="11. Scrapy爬虫的监控与日志管理:确保稳定运行" target="_blank">11. Scrapy爬虫的监控与日志管理:确保稳定运行</a>
                        <span class="text-muted">杨胜增</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>11.Scrapy爬虫的监控与日志管理:确保稳定运行在进行大规模的爬虫部署时,如何高效地监控爬虫的运行状态,及时发现并解决潜在问题,变得至关重要。Scrapy提供了灵活的日志管理功能,同时也可以与外部工具集成,实现爬虫的实时监控与告警。本篇文章将探讨如何使用Scrapy内置的日志功能来追踪爬虫的状态、调试问题,并通过集成外部监控工具来提高爬虫的稳定性和可维护性。11.1Scrapy内置日志功能Sc</div>
                    </li>
                    <li><a href="/article/1883588069802700800.htm"
                           title="Python从入门到进阶教程文章分享汇总~持续更新" target="_blank">Python从入门到进阶教程文章分享汇总~持续更新</a>
                        <span class="text-muted">Amo Xiang</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%95%85%E7%9A%84Python/1.htm">流畅的Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录一、Python语言基础1.1基础语法1.2练习二、web方向2.1flask2.2django2.3fastapi三、爬虫方向3.1爬虫基础3.2Scrapy框架3.3反爬3.5爬虫架构3.6案例四、数据分析和ai4.1数据分析4.2AI五、Python常用模块,内置函数与方法总结5.1内置函数5.2常用模块六、视频讲解七、项目案例一、Python语言基础1.1基础语法2024Python3</div>
                    </li>
                    <li><a href="/article/1882950750498254848.htm"
                           title="【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程" target="_blank">【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程</a>
                        <span class="text-muted">m0_74825360</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/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a>
                        <div>前言在大数据和网络爬虫领域,Scrapy是一个功能强大且广泛使用的开源爬虫框架。它能够帮助我们快速地构建爬虫项目,并高效地从各种网站中提取数据。在本篇文章中,我将带大家从零开始使用Scrapy框架,构建一个简单的爬虫项目,爬取豆瓣电影Top250的电影信息。Scrapy官方文档:ScrapyDocumentation豆瓣电影Top250:豆瓣电影Top250本文的爬虫项目配置如下:系统:Windo</div>
                    </li>
                    <li><a href="/article/1882098197501898752.htm"
                           title="svm python 模型绘图_1SVM处理数据并绘图" target="_blank">svm python 模型绘图_1SVM处理数据并绘图</a>
                        <span class="text-muted">张炜大师傅</span>
<a class="tag" taget="_blank" href="/search/svm/1.htm">svm</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%9E%8B%E7%BB%98%E5%9B%BE/1.htm">模型绘图</a>
                        <div>爬虫Python基础、数据分析扩展包Numpy、pandas、matplotlib,Python读取MySQL数据,Python爬虫及Scrapy框架,无监督机器学习算法聚类分析等,以及案例:互联网金融行业客户价值分析等。机器学习机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有</div>
                    </li>
                    <li><a href="/article/1881966918223589376.htm"
                           title="【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程" target="_blank">【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程</a>
                        <span class="text-muted">brhhh_sehe</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a>
                        <div>前言在大数据和网络爬虫领域,Scrapy是一个功能强大且广泛使用的开源爬虫框架。它能够帮助我们快速地构建爬虫项目,并高效地从各种网站中提取数据。在本篇文章中,我将带大家从零开始使用Scrapy框架,构建一个简单的爬虫项目,爬取豆瓣电影Top250的电影信息。Scrapy官方文档:ScrapyDocumentation豆瓣电影Top250:豆瓣电影Top250本文的爬虫项目配置如下:系统:Windo</div>
                    </li>
                    <li><a href="/article/1880924074377539584.htm"
                           title="网络爬虫——分布式爬虫架构" target="_blank">网络爬虫——分布式爬虫架构</a>
                        <span class="text-muted">好看资源分享</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%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/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>分布式爬虫在现代大数据采集中是不可或缺的一部分。随着互联网信息量的爆炸性增长,单机爬虫在性能、效率和稳定性上都面临巨大的挑战。分布式爬虫通过任务分发、多节点协作以及结果整合,成为解决大规模数据抓取任务的核心手段。本节将从Scrapy框架的基本使用、Scrapy-Redis的分布式实现、分布式爬虫的优化策略等多个方面展开,结合实际案例,帮助开发者掌握分布式爬虫的设计与实现。1.Scrapy框架的核心</div>
                    </li>
                    <li><a href="/article/1880315368543678464.htm"
                           title="爬虫scrapy框架进阶-CrawlSpider, Rule" target="_blank">爬虫scrapy框架进阶-CrawlSpider, Rule</a>
                        <span class="text-muted">吃猫的鱼python</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/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a>
                        <div>文章适合于所有的相关人士进行学习各位看官看完了之后不要立刻转身呀期待三连关注小小博主加收藏⚓️小小博主回关快会给你意想不到的惊喜呀⚓️文章目录scrapy中加入CrawlSpider️创建项目️提取器和规则RULEscrapy爬虫实战️分析网站️代码部分1.settings部分2.starts部分3.items部分4.重要的lyw_spider部分5.pipelines部分scrapy中加入Cra</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/1832038298164490240.htm"
                           title="python爬亚马逊数据_python爬虫----(6. scrapy框架,抓取亚马逊数据)" target="_blank">python爬亚马逊数据_python爬虫----(6. scrapy框架,抓取亚马逊数据)</a>
                        <span class="text-muted">weixin_39628342</span>
<a class="tag" taget="_blank" href="/search/python%E7%88%AC%E4%BA%9A%E9%A9%AC%E9%80%8A%E6%95%B0%E6%8D%AE/1.htm">python爬亚马逊数据</a>
                        <div>利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦。耽误了好久,还是豆瓣好呀,URL那么的规范。唉,亚马逊URL乱七八糟的....可能对url理解还不够.amazon├──amazon│├──__init__.py│├──__init__.pyc│├──items.py│├──items.pyc│├──msic││├──__init__.py││└──pad_urls.p</div>
                    </li>
                    <li><a href="/article/1831523093407952896.htm"
                           title="爬虫进阶之人见人爱的Scrapy框架--Scrapy入门" target="_blank">爬虫进阶之人见人爱的Scrapy框架--Scrapy入门</a>
                        <span class="text-muted">我真的超级好</span>

                        <div>不要重复造轮子,这是学习Python以来听得最多的一句话,无非就是叫我们要灵活运用现有的库,毕竟Python的一大特点就是拥有功能强大强大而种类丰富的库。那么在爬虫领域要灵活使用哪个轮子呢?--当然是目前最火的爬虫框架Scrapy。笔者通过慕课网免费课程《Python最火爬虫框架Scrapy入门与实践》+书籍《精通Scrapy网络爬虫》+度娘+CSDN完成自学,其中遇到诸多困难(要么太深入没看懂,</div>
                    </li>
                    <li><a href="/article/1830703226035466240.htm"
                           title="Scrapy框架架构---学习笔记" target="_blank">Scrapy框架架构---学习笔记</a>
                        <span class="text-muted">怪猫訷</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>Scrapy框架架构Scrapy框架介绍:写一个爬虫,需要做很多的事情。比如:发送网络请求、数据解析、数据存储、反反爬虫机制(更换ip代理、设置请求头等)、异步请求等。这些工作如果每次都要自己从零开始写的话,比较浪费时间。因此Scrapy把一些基础的东西封装好了,在他上面写爬虫可以变的更加的高效(爬取效率和开发效率)。因此真正在公司里,一些上了量的爬虫,都是使用Scrapy框架来解决。Scrapy</div>
                    </li>
                    <li><a href="/article/1830701210613673984.htm"
                           title="Scrapy ---心得" target="_blank">Scrapy ---心得</a>
                        <span class="text-muted">auo8191</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/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>scrapy框架基础-框架:具有很多功能,且具有很强通用性的项目模板-环境安装:#环境准备linux系统pip3installscrapywindows系统1pip3installwheel2下载Twisted-19.2.0-cp36-cp36m-win-amd64.whl3进入下载目录,执行pip3installTwisted‑19.2.0‑cp36‑cp36m‑win_amd64.whl4pi</div>
                    </li>
                    <li><a href="/article/1829759762623983616.htm"
                           title="Python爬虫系列总结" target="_blank">Python爬虫系列总结</a>
                        <span class="text-muted">qformat</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爬虫系列总结包含(Scrapy框架介绍)文章目录Python爬虫系列总结包含(Scrapy框架介绍)一、前言二、Python爬虫的基础三、Python爬虫进阶四、简易爬虫总结五、Python爬虫框架六、爬虫部署一、前言随着WEB2.0时代的到来,网络已经成为了人们获取信息的重要途径,而爬虫技术可以让我们从海量的网络数据中快速地获取我们想要的信息。Python是一种简单易学、功能强大的编</div>
                    </li>
                    <li><a href="/article/1828082175908605952.htm"
                           title="python用scrapy爬虫豆瓣_python爬虫框架scrapy 豆瓣实战" target="_blank">python用scrapy爬虫豆瓣_python爬虫框架scrapy 豆瓣实战</a>
                        <span class="text-muted">weixin_39745724</span>

                        <div>Scrapy官方介绍是Anopensourceandcollaborativeframeworkforextractingthedatayouneedfromwebsites.Inafast,simple,yetextensibleway.意思就是一个开源和协作框架,用于以快速,简单,可扩展的方式从网站中提取所需的数据。环境准备本文项目使用环境及工具如下python3scrapymongodbpy</div>
                    </li>
                    <li><a href="/article/1827373611703431168.htm"
                           title="scrapy框架--快速了解" target="_blank">scrapy框架--快速了解</a>
                        <span class="text-muted">金灰</span>
<a class="tag" taget="_blank" href="/search/%23/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/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>免责声明:本文仅做分享~目录介绍:5大核心组件:安装scrapy:创建到启动:修改日志配置:settings.py修改君子协议配置:伪装浏览器头:让代码去终端执行:数据保存:1-基于命令2-基于管道文档:介绍:5大核心组件:Scrapy是一个开源的Python框架,用于抓取网站数据并进行数据处理。Scrapy是一个快速、高效的框架,可以用来构建快速、可扩展的爬虫。Scrapy框架的主要组件包括:1</div>
                    </li>
                    <li><a href="/article/1826328823059279872.htm"
                           title="职位分析网站" target="_blank">职位分析网站</a>
                        <span class="text-muted">MA木易YA</span>

                        <div>根据之前在拉勾网所获取到的数据进行分析展示简介1.项目采用Django框架进行网站架构,结合爬虫、echarts图表,wordcloud等对职位信息进行分析展示。2.数据来自拉勾网,采用scrapy爬虫框架获取,仅用作学习。3.页面采用AmazeUI|HTML5跨屏前端框架进行设计。用户这一块和之前博客、图书网站一致,利用Django本身的认证,结合Ajax、邮箱进行登陆注册,这一块的代码是可以移</div>
                    </li>
                    <li><a href="/article/1770937145754714112.htm"
                           title="强大的开源网络爬虫框架Scrapy的基本介绍(入门级)" target="_blank">强大的开源网络爬虫框架Scrapy的基本介绍(入门级)</a>
                        <span class="text-muted">铁松溜达py</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</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/css/1.htm">css</a>
                        <div>Scrapy是一个强大的开源网络爬虫框架,用于从网站上抓取数据。它基于Twisted异步网络框架,可以高效地处理并发请求和数据处理。以下是Scrapy框架的一些重要特点和功能:1.**灵活的架构**:-Scrapy提供了灵活的架构,可以轻松地定义和定制爬虫逻辑、数据提取规则和数据处理流程。2.**高性能**:-Scrapy使用Twisted异步网络框架,能够高效地处理并发请求和数据处理,从而实现高</div>
                    </li>
                    <li><a href="/article/1762687665506967552.htm"
                           title="Scrapy与分布式开发(1.1):课程导学" target="_blank">Scrapy与分布式开发(1.1):课程导学</a>
                        <span class="text-muted">九月镇灵将</span>
<a class="tag" taget="_blank" href="/search/%E6%89%93%E9%80%A0%E9%AB%98%E6%95%88%E7%88%AC%E8%99%AB%E7%B3%BB%E7%BB%9F/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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>Scrapy与分布式开发:从入门到精通,打造高效爬虫系统课程大纲在这个专栏中,我们将一起探索Scrapy框架的魅力,以及如何通过Scrapy-Redis实现分布式爬虫的开发。在本课程导学中,我们将为您简要介绍课程的学习目标、内容安排以及学习方法,帮助您更好地了解本专栏的学习框架和重点。学习目标掌握网页抓取核心技术与知识,包括常用请求库、提取库;掌握Scrapy框架的基础知识和核心功能,包括爬虫设计</div>
                    </li>
                                <li><a href="/article/7.htm"
                                       title="LeetCode[位运算] - #137 Single Number II" target="_blank">LeetCode[位运算] - #137 Single Number II</a>
                                    <span class="text-muted">Cwind</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a><a class="tag" taget="_blank" href="/search/LeetCode/1.htm">LeetCode</a><a class="tag" taget="_blank" href="/search/%E9%A2%98%E8%A7%A3/1.htm">题解</a><a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a>
                                    <div>原题链接:#137 Single Number II  
要求: 
给定一个整型数组,其中除了一个元素之外,每个元素都出现三次。找出这个元素 
注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间 
  
难度:中等 
  
分析: 
与#136类似,都是考察位运算。不过出现两次的可以使用异或运算的特性 n XOR n = 0, n XOR 0 = n,即某一</div>
                                </li>
                                <li><a href="/article/134.htm"
                                       title="《JavaScript语言精粹》笔记" target="_blank">《JavaScript语言精粹》笔记</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>0、JavaScript的简单数据类型包括数字、字符创、布尔值(true/false)、null和undefined值,其它值都是对象。 
1、JavaScript只有一个数字类型,它在内部被表示为64位的浮点数。没有分离出整数,所以1和1.0的值相同。 
2、NaN是一个数值,表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它本身。可以用函数isNaN(number)检测NaN,但是</div>
                                </li>
                                <li><a href="/article/261.htm"
                                       title="你应该更新的Java知识之常用程序库" target="_blank">你应该更新的Java知识之常用程序库</a>
                                    <span class="text-muted">Kai_Ge</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进。如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东西。 
Guava 
Guava[gwɑ:və],一句话,只要你做Java项目,就应该用Guava(Github)。 
guava 是 Google 出品的一套 Java 核心库,在我看来,它甚至应该</div>
                                </li>
                                <li><a href="/article/388.htm"
                                       title="HttpClient" target="_blank">HttpClient</a>
                                    <span class="text-muted">120153216</span>
<a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a>
                                    <div>/**
 * 可以传对象的请求转发,对象已流形式放入HTTP中
 */
public static Object doPost(Map<String,Object> parmMap,String url)
	{
		Object object = null;
		HttpClient hc = new HttpClient();
		
		String fullURL </div>
                                </li>
                                <li><a href="/article/515.htm"
                                       title="Django model字段类型清单" target="_blank">Django model字段类型清单</a>
                                    <span class="text-muted">2002wmj</span>
<a class="tag" taget="_blank" href="/search/django/1.htm">django</a>
                                    <div>Django 通过 models 实现数据库的创建、修改、删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长。你通常不需要直接使用这个字段;如果你不指定主键的话,系统会自动添加一个主键字段到你的model。(参阅自动主键字段)  BooleanField:布尔字段,管理工具里会自动将其描述为checkbox。  Cha</div>
                                </li>
                                <li><a href="/article/642.htm"
                                       title="在SQLSERVER中查找消耗CPU最多的SQL" target="_blank">在SQLSERVER中查找消耗CPU最多的SQL</a>
                                    <span class="text-muted">357029540</span>
<a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a>
                                    <div>返回消耗CPU数目最多的10条语句 
 
SELECT TOP 10 
   total_worker_time/execution_count AS avg_cpu_cost, plan_handle, 
   execution_count, 
   (SELECT SUBSTRING(text, statement_start_of</div>
                                </li>
                                <li><a href="/article/769.htm"
                                       title="Myeclipse项目无法部署,Undefined exploded archive location" target="_blank">Myeclipse项目无法部署,Undefined exploded archive location</a>
                                    <span class="text-muted">7454103</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a>
                                    <div>做个备忘! 
 
错误信息为: 
      Undefined exploded archive location 
 
 
原因: 
          在工程转移过程中,导致工程的配置文件出错; 
 
 
解决方法: 
   </div>
                                </li>
                                <li><a href="/article/896.htm"
                                       title="GMT时间格式转换" target="_blank">GMT时间格式转换</a>
                                    <span class="text-muted">adminjun</span>
<a class="tag" taget="_blank" href="/search/GMT/1.htm">GMT</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E8%BD%AC%E6%8D%A2/1.htm">时间转换</a>
                                    <div>普通的时间转换问题我这里就不再罗嗦了,我想大家应该都会那种低级的转换问题吧,现在我向大家总结一下如何转换GMT时间格式,这种格式的转换方法网上还不是很多,所以有必要总结一下,也算给有需要的朋友一个小小的帮助啦。 
1、可以使用 
SimpleDateFormat SimpleDateFormat    
EEE-三位星期 
d-天 
MMM-月 
yyyy-四位年 
</div>
                                </li>
                                <li><a href="/article/1023.htm"
                                       title="Oracle数据库新装连接串问题" target="_blank">Oracle数据库新装连接串问题</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/oracle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">oracle数据库</a>
                                    <div>割接新装了数据库,客户端登陆无问题,apache/cgi-bin程序有问题,sqlnet.log日志如下: 
Fatal NI connect error 12170. 
  VERSION INFORMATION:         TNS for Linux: Version 10.2.0.4.0 - Product</div>
                                </li>
                                <li><a href="/article/1150.htm"
                                       title="回顾java数组复制" target="_blank">回顾java数组复制</a>
                                    <span class="text-muted">ayaoxinchao</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a>
                                    <div>在写这篇文章之前,也看了一些别人写的,基本上都是大同小异。文章是对java数组复制基础知识的回顾,算是作为学习笔记,供以后自己翻阅。首先,简单想一下这个问题:为什么要复制数组?我的个人理解:在我们在利用一个数组时,在每一次使用,我们都希望它的值是初始值。这时我们就要对数组进行复制,以达到原始数组值的安全性。java数组复制大致分为3种方式:①for循环方式 ②clone方式 ③arrayCopy方</div>
                                </li>
                                <li><a href="/article/1277.htm"
                                       title="java web会话监听并使用spring注入" target="_blank">java web会话监听并使用spring注入</a>
                                    <span class="text-muted">bewithme</span>
<a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a>
                                    <div>  
      在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。 
       
import java.util.ArrayList;
import java.ut</div>
                                </li>
                                <li><a href="/article/1404.htm"
                                       title="NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)" target="_blank">NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</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/NoSQL/1.htm">NoSQL</a>
                                    <div>一 .Redis常用命令 
        Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。 
        a.键值相关命令 
        b.服务器相关命令 
1.键值相关命令 
      &</div>
                                </li>
                                <li><a href="/article/1531.htm"
                                       title="java枚举序列化问题" target="_blank">java枚举序列化问题</a>
                                    <span class="text-muted">bingyingao</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE/1.htm">枚举</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97%E5%8C%96/1.htm">序列化</a>
                                    <div>对象在网络中传输离不开序列化和反序列化。而如果序列化的对象中有枚举值就要特别注意一些发布兼容问题: 
 
 
1.加一个枚举值 
新机器代码读分布式缓存中老对象,没有问题,不会抛异常。 
 
老机器代码读分布式缓存中新对像,反序列化会中断,所以在所有机器发布完成之前要避免出现新对象,或者提前让老机器拥有新增枚举的jar。 
 
 
 
  2.删一个枚举值 
新机器代码读分布式缓存中老对象,反序列</div>
                                </li>
                                <li><a href="/article/1658.htm"
                                       title="【Spark七十八】Spark Kyro序列化" target="_blank">【Spark七十八】Spark Kyro序列化</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a>
                                    <div>当使用SparkContext的saveAsObjectFile方法将对象序列化到文件,以及通过objectFile方法将对象从文件反序列出来的时候,Spark默认使用Java的序列化以及反序列化机制,通常情况下,这种序列化机制是很低效的,Spark支持使用Kyro作为对象的序列化和反序列化机制,序列化的速度比java更快,但是使用Kyro时要注意,Kyro目前还是有些bug。 
 
 Spark</div>
                                </li>
                                <li><a href="/article/1785.htm"
                                       title="Hybridizing OO and Functional Design" target="_blank">Hybridizing OO and Functional Design</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a><a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a>
                                    <div>  推荐博文:
Tell Above, and Ask Below - Hybridizing OO and Functional Design  
文章中把OO和FP讲的深入透彻,里面把smalltalk和haskell作为典型的两种编程范式代表语言,此点本人极为同意,smalltalk可以说是最能体现OO设计的面向对象语言,smalltalk的作者Alan kay也是OO的最早先驱,</div>
                                </li>
                                <li><a href="/article/1912.htm"
                                       title="Java-Collections Framework学习与总结-HashMap" target="_blank">Java-Collections Framework学习与总结-HashMap</a>
                                    <span class="text-muted">BrokenDreams</span>
<a class="tag" taget="_blank" href="/search/Collections/1.htm">Collections</a>
                                    <div>        开发中常常会用到这样一种数据结构,根据一个关键字,找到所需的信息。这个过程有点像查字典,拿到一个key,去字典表中查找对应的value。Java1.0版本提供了这样的类java.util.Dictionary(抽象类),基本上支持字典表的操作。后来引入了Map接口,更好的描述的这种数据结构。 
 &nb</div>
                                </li>
                                <li><a href="/article/2039.htm"
                                       title="读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility" target="_blank">读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 
 
 




/**
 * 业务逻辑:项目经理只能处理500以下的费用申请,部门经理是1000,总经理不设限。简单起见,只同意“Tom”的申请
 * bylijinnan
 */
abstract class Handler {
	/* </div>
                                </li>
                                <li><a href="/article/2166.htm"
                                       title="Android中启动外部程序" target="_blank">Android中启动外部程序</a>
                                    <span class="text-muted">cherishLC</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>1、启动外部程序 
引用自: 
http://blog.csdn.net/linxcool/article/details/7692374 
 
//方法一
Intent intent=new Intent();
//包名 包名+类名(全路径)
intent.setClassName("com.linxcool", "com.linxcool.PlaneActi</div>
                                </li>
                                <li><a href="/article/2293.htm"
                                       title="summary_keep_rate" target="_blank">summary_keep_rate</a>
                                    <span class="text-muted">coollyj</span>
<a class="tag" taget="_blank" href="/search/SUM/1.htm">SUM</a>
                                    <div>
BEGIN  
      /*DECLARE  minDate varchar(20) ;
      DECLARE  maxDate varchar(20) ;*/
      DECLARE  stkDate varchar(20) ;

      DECLARE done int default -1; 
			/* 游标中 注册服务器地址 */  
      DE</div>
                                </li>
                                <li><a href="/article/2420.htm"
                                       title="hadoop hdfs 添加数据目录出错" target="_blank">hadoop hdfs 添加数据目录出错</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hdfs/1.htm">hdfs</a><a class="tag" taget="_blank" href="/search/%E6%89%A9%E5%AE%B9/1.htm">扩容</a>
                                    <div>由于原来配置的hadoop data目录快要用满了,故准备修改配置文件增加数据目录,以便扩容,但由于疏忽,把core-site.xml, hdfs-site.xml配置文件dfs.datanode.data.dir 配置项增加了配置目录,但未创建实际目录,重启datanode服务时,报如下错误: 
 
2014-11-18 08:51:39,128 WARN org.apache.hadoop.h</div>
                                </li>
                                <li><a href="/article/2547.htm"
                                       title="grep 目录级联查找" target="_blank">grep 目录级联查找</a>
                                    <span class="text-muted">dongwei_6688</span>
<a class="tag" taget="_blank" href="/search/grep/1.htm">grep</a>
                                    <div>       在Mac或者Linux下使用grep进行文件内容查找时,如果给定的目标搜索路径是当前目录,那么它默认只搜索当前目录下的文件,而不会搜索其下面子目录中的文件内容,如果想级联搜索下级目录,需要使用一个“-r”参数: 
grep -n -r "GET" . 
  
上面的命令将会找出当前目录“.”及当前目录中所有下级目录</div>
                                </li>
                                <li><a href="/article/2674.htm"
                                       title="yii 修改模块使用的布局文件" target="_blank">yii 修改模块使用的布局文件</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a><a class="tag" taget="_blank" href="/search/layouts/1.htm">layouts</a>
                                    <div>方法一:yii模块默认使用系统当前的主题布局文件,如果在主配置文件中配置了主题比如:  'theme'=>'mythm',   那么yii的模块就使用 protected/themes/mythm/views/layouts 下的布局文件;   如果未配置主题,那么 yii的模块就使用  protected/views/layouts 下的布局文件, 总之默认不是使用自身目录 pr</div>
                                </li>
                                <li><a href="/article/2801.htm"
                                       title="设计模式之单例模式" target="_blank">设计模式之单例模式</a>
                                    <span class="text-muted">come_for_dream</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a><a class="tag" taget="_blank" href="/search/%E6%87%92%E6%B1%89%E5%BC%8F%E9%A5%BF%E6%B1%89%E5%BC%8F/1.htm">懒汉式饿汉式</a><a class="tag" taget="_blank" href="/search/%E5%8F%8C%E9%87%8D%E6%A3%80%E9%AA%8C%E9%94%81%E5%A4%B1%E8%B4%A5/1.htm">双重检验锁失败</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E5%BA%8F%E5%86%99%E5%85%A5/1.htm">无序写入</a>
                                    <div>                今天该来的面试还没来,这个店估计不会来电话了,安静下来写写博客也不错,没事翻了翻小易哥的博客甚至与大牛们之间的差距,基础知识不扎实建起来的楼再高也只能是危楼罢了,陈下心回归基础把以前学过的东西总结一下。 
  
*********************************</div>
                                </li>
                                <li><a href="/article/2928.htm"
                                       title="8、数组" target="_blank">8、数组</a>
                                    <span class="text-muted">豆豆咖啡</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">一维数组</a>
                                    <div>  
一、概念 
  
    数组是同一种类型数据的集合。其实数组就是一个容器。 
  
二、好处 
  
    可以自动给数组中的元素从0开始编号,方便操作这些元素 
  
三、格式 
  
//一维数组
1,元素类型[] 变量名 = new 元素类型[元素的个数]
int[] arr =</div>
                                </li>
                                <li><a href="/article/3055.htm"
                                       title="Decode Ways" target="_blank">Decode Ways</a>
                                    <span class="text-muted">hcx2013</span>
<a class="tag" taget="_blank" href="/search/decode/1.htm">decode</a>
                                    <div>A message containing letters from A-Z is being encoded to numbers using the following mapping: 
'A' -> 1
'B' -> 2
...
'Z' -> 26
 
Given an encoded message containing digits, det</div>
                                </li>
                                <li><a href="/article/3182.htm"
                                       title="Spring4.1新特性——异步调度和事件机制的异常处理" target="_blank">Spring4.1新特性——异步调度和事件机制的异常处理</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/spring+4.1/1.htm">spring 4.1</a>
                                    <div>目录 
Spring4.1新特性——综述 
Spring4.1新特性——Spring核心部分及其他 
Spring4.1新特性——Spring缓存框架增强 
Spring4.1新特性——异步调用和事件机制的异常处理 
Spring4.1新特性——数据库集成测试脚本初始化 
Spring4.1新特性——Spring MVC增强 
Spring4.1新特性——页面自动化测试框架Spring MVC T</div>
                                </li>
                                <li><a href="/article/3309.htm"
                                       title="squid3(高命中率)缓存服务器配置" target="_blank">squid3(高命中率)缓存服务器配置</a>
                                    <span class="text-muted">liyonghui160com</span>

                                    <div>  
  
系统:centos 5.x 
  需要的软件:squid-3.0.STABLE25.tar.gz 
1.下载squid 
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz 
tar zxf squid-3.0.STABLE25.tar.gz &&</div>
                                </li>
                                <li><a href="/article/3436.htm"
                                       title="避免Java应用中NullPointerException的技巧和最佳实践" target="_blank">避免Java应用中NullPointerException的技巧和最佳实践</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。     总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常 
Object unk</div>
                                </li>
                                <li><a href="/article/3563.htm"
                                       title="如何在Swift语言中创建http请求" target="_blank">如何在Swift语言中创建http请求</a>
                                    <span class="text-muted">shoothao</span>
<a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a>
                                    <div>  
 概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。  
   
如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。 
在这里,我将作出一些建议来回答上述问题。常见的</div>
                                </li>
                                <li><a href="/article/3690.htm"
                                       title="Spring事务的传播方式" target="_blank">Spring事务的传播方式</a>
                                    <span class="text-muted">uule</span>
<a class="tag" taget="_blank" href="/search/spring%E4%BA%8B%E5%8A%A1/1.htm">spring事务</a>
                                    <div>传播方式:  
      新建事务 
      required 
      required_new   - 挂起当前 
  
      非事务方式运行 
      supports 
  &nbs</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>