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/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/1759714390724145152.htm"
                           title="Python招聘信息爬虫+数据分析+可视化系统+薪资预测+岗位推荐(大数据项目)计算机毕业设计 源码下载" target="_blank">Python招聘信息爬虫+数据分析+可视化系统+薪资预测+岗位推荐(大数据项目)计算机毕业设计 源码下载</a>
                        <span class="text-muted">计算机毕业设计指导</span>

                        <div>boss直聘招聘信息爬虫+数据分析+可视化系统+薪资预测+岗位推荐(大数据项目)计算机毕业设计源码下载一、开发技术pycharm、MySQL数据库/sqlite3数据库、Python3.x版本、Flask框架、Scrapy框架、词云、echartsanconda3、chrome_driver1、开发框架前端htmlcssajax后端flaskrequestspandas数据库mysql二、功能招聘</div>
                    </li>
                    <li><a href="/article/1759426728029138944.htm"
                           title="Python爬虫开发:Scrapy框架与Requests库" target="_blank">Python爬虫开发:Scrapy框架与Requests库</a>
                        <span class="text-muted">数据小爬虫</span>
<a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%95%86api/1.htm">电商api</a><a class="tag" taget="_blank" href="/search/api/1.htm">api</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/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>Python爬虫开发中有两个非常流行的工具:Scrapy框架和Requests库。它们各自有自己的优点和适用场景。ScrapyScrapy是一个为了爬取网站并提取结构化数据而编写的应用框架,可以非常方便地实现网页信息的抓取。Scrapy提供了多种可配置、可重用的组件,如调度器、下载器、爬虫和管道等,使得开发者可以快速地构建出稳定、高效的网络爬虫。Scrapy的主要特点包括:异步处理:Scrapy基</div>
                    </li>
                    <li><a href="/article/1759423906034298880.htm"
                           title="Day 25 25.2 Scrapy框架之分布式爬虫(scrapy_redis)" target="_blank">Day 25 25.2 Scrapy框架之分布式爬虫(scrapy_redis)</a>
                        <span class="text-muted">Chimengmeng</span>
<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/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>分布式爬虫(scrapy_redis)分布式爬虫是指将一个大型的爬虫任务分解成多个子任务,由多个爬虫进程或者多台机器同时执行的一种爬虫方式。在分布式爬虫中,每个爬虫进程或者机器都具有独立的爬取能力,可以独立地爬取指定的网页或者网站,然后将爬取到的数据进行汇总和处理。分布式爬虫相对于单机爬虫的优势在于:高效性:分布式爬虫可以同时爬取多个网页或者网站,从而大大提高爬取速度和效率。可扩展性:分布式爬虫可</div>
                    </li>
                    <li><a href="/article/1759422750478381056.htm"
                           title="基于scrapy框架的单机爬虫与分布式爬虫" target="_blank">基于scrapy框架的单机爬虫与分布式爬虫</a>
                        <span class="text-muted">Jesse_Kyrie</span>
<a class="tag" taget="_blank" href="/search/python%E7%88%AC%E8%99%AB%E7%BB%BC%E5%90%88/1.htm">python爬虫综合</a><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/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>我们知道,对于scrapy框架来说,不仅可以单机构建复杂的爬虫项目,还可以通过简单的修改,将单机版爬虫改为分布式的,大大提高爬取效率。下面我就以一个简单的爬虫案例,介绍一下如何构建一个单机版的爬虫,并做简单修改,使其实现分布式功能。需求分析访问页面,并实现1-10页的页面爬取,并保存到data目录下解析页面,并获取到图片链接,并下载图片,保存到imgs目录下单机版爬虫准备爬虫项目使用命令构建爬虫项</div>
                    </li>
                    <li><a href="/article/1757729932668059648.htm"
                           title="python从入门到精通(二十二):python爬虫框架使用" target="_blank">python从入门到精通(二十二):python爬虫框架使用</a>
                        <span class="text-muted">HACKNOE</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a>
                        <div>selenium自动化scrapy框架pyspider框架爬虫验证码动态渲染页面爬取模拟登录AutoScraper</div>
                    </li>
                    <li><a href="/article/1757615832013225984.htm"
                           title="Scrapy | 全方位解析Scrapy框架!" target="_blank">Scrapy | 全方位解析Scrapy框架!</a>
                        <span class="text-muted">谢小磊</span>

                        <div>1、架构介绍Scrapy使用了Twisted异步网络库来处理网络通讯。整体架构大致如下:model.PNG它可以分为如下的几个部分:Engine。引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心。Item。项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该Item对象。Scheduler。调度器,接受引擎发过来的请求并将其加入队列中,在引擎再次请求的时候将请求提供给引擎。Downl</div>
                    </li>
                    <li><a href="/article/1757594907024834560.htm"
                           title="Python学习之路-爬虫提高:scrapy基础" target="_blank">Python学习之路-爬虫提高:scrapy基础</a>
                        <span class="text-muted">geobuins</span>
<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/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>Python学习之路-爬虫提高:scrapy基础为什么要学习scrapy通过前面的学习,我们已经能够解决90%的爬虫问题了,那么scrapy是为了解决剩下的10%的问题么,不是,scrapy框架能够让我们的爬虫效率更高什么是scrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取。Scrapy使用了Twisted['twɪstɪd]</div>
                    </li>
                    <li><a href="/article/1757395710732419072.htm"
                           title="Scrapy爬虫爬取书籍网站信息(二)" target="_blank">Scrapy爬虫爬取书籍网站信息(二)</a>
                        <span class="text-muted">无情Array</span>
<a class="tag" taget="_blank" href="/search/Python%E8%AF%AD%E8%A8%80/1.htm">Python语言</a><a class="tag" taget="_blank" href="/search/Scrapy%E7%88%AC%E8%99%AB/1.htm">Scrapy爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>上文中我们了解到了如何在网页中的源代码中查找到相关信息,接下来进行页面爬取工作:1、首先创建一个Scrapy项目,取名为toscrape_book,接下来创建Spider文件以及Spider类,步骤如下:整个Scrapy框架建于D盘下的pycodes文件夹中,并在文件夹下的Spider文件中建立一个名为books的爬虫文件。2、在实现Spider之前,先定义封装书籍信息的Item类,在toscra</div>
                    </li>
                    <li><a href="/article/1756785242057752576.htm"
                           title="sheng的学习笔记-网络爬虫scrapy框架" target="_blank">sheng的学习笔记-网络爬虫scrapy框架</a>
                        <span class="text-muted">coldstarry</span>
<a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6%E5%88%86%E6%9E%90/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框架是一个为了爬取网站数据,提取数据的框架,我们熟知爬虫总共有四大部分,请求、响应、解析、存储,scrapy框架都已经搭建好了。scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架,scrapy使用了一种</div>
                    </li>
                    <li><a href="/article/1755850268815147008.htm"
                           title="刘硕的Scrapy笔记(十,文件和图片下载)" target="_blank">刘硕的Scrapy笔记(十,文件和图片下载)</a>
                        <span class="text-muted">费云帆</span>

                        <div>1.文件下载:Scrapy框架内部提供了两个ItemPipeline,专门用于下载文件和图片:●FilesPipeline●ImagesPipeline我们可以将这两个ItemPipeline看作特殊的下载器,用户使用时只需要通过item的一个特殊字段将要下载文件或图片的url传递给它们,它们会自动将文件或图片下载到本地,并将下载结果信息存入item的另一个特殊字段,以便用户在导出文件中查阅。下面</div>
                    </li>
                    <li><a href="/article/1754908316435234816.htm"
                           title="《Python 网络爬虫简易速速上手小册》第3章:Python 网络爬虫的设计(2024 最新版)" target="_blank">《Python 网络爬虫简易速速上手小册》第3章:Python 网络爬虫的设计(2024 最新版)</a>
                        <span class="text-muted">江帅帅</span>
<a class="tag" taget="_blank" href="/search/%E3%80%8APython/1.htm">《Python</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB%E7%AE%80%E6%98%93%E9%80%9F%E9%80%9F%E4%B8%8A%E6%89%8B%E5%B0%8F%E5%86%8C%E3%80%8B/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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/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/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a>
                        <div>文章目录3.1设计高效的爬取策略3.1.1重点基础知识讲解3.1.2重点案例:使用Scrapy框架进行并发爬取3.1.3拓展案例1:使用Requests和gevent进行异步请求3.1.4拓展案例2:利用缓存机制避免重复请求3.2管理爬虫的请求频率3.2.1重点基础知识讲解3.2.2重点案例:使用time.sleep控制请求频率3.2.3拓展案例1:遵守robots.txt3.2.4拓展案例2:利</div>
                    </li>
                    <li><a href="/article/1754165075037405184.htm"
                           title="python校园舆情分析系统 可视化 情感分析 朴素贝叶斯分类算法 爬虫 大数据 毕业设计(源码)✅" target="_blank">python校园舆情分析系统 可视化 情感分析 朴素贝叶斯分类算法 爬虫 大数据 毕业设计(源码)✅</a>
                        <span class="text-muted">vx_biyesheji0001</span>
<a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/biyesheji0001/1.htm">biyesheji0001</a><a class="tag" taget="_blank" href="/search/biyesheji0002/1.htm">biyesheji0002</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E7%B1%BB/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/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/%E8%B4%9D%E5%8F%B6%E6%96%AF%E7%AE%97%E6%B3%95/1.htm">贝叶斯算法</a><a class="tag" taget="_blank" href="/search/%E8%88%86%E6%83%85%E5%88%86%E6%9E%90/1.htm">舆情分析</a><a class="tag" taget="_blank" href="/search/%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90/1.htm">情感分析</a>
                        <div>毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业。1、项目介绍技术栈:Python语言、Django框架、数据库、Echarts可视化、scrapy爬虫技术、HTML朴素贝叶斯分类算法(情感</div>
                    </li>
                    <li><a href="/article/1753992601922453504.htm"
                           title="爬虫:request、scrapy、scrapy-redis的爬虫流程,匹配机制:xpath、正则、css选择器,反爬虫策略" target="_blank">爬虫:request、scrapy、scrapy-redis的爬虫流程,匹配机制:xpath、正则、css选择器,反爬虫策略</a>
                        <span class="text-muted">little star*</span>
<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/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                        <div>文章目录一、python、PHP、Java、C/C++爬虫的比较二、python爬虫基础知识1.抓取HTML页面2.解析响应页面的内容3.采集动态HTMLselenium操作cookie隐式等待和显示等待打开新窗口和切换页面:4.验证码处理5.scrapy框架(scrapy、pyspider)安装scrapy框架scrapy框架架构项目文件作用CrawlSpider爬虫使用twisted异步保存M</div>
                    </li>
                    <li><a href="/article/1753862085994889216.htm"
                           title="python 爬虫篇(1)---->re正则的详细讲解(附带演示代码)" target="_blank">python 爬虫篇(1)---->re正则的详细讲解(附带演示代码)</a>
                        <span class="text-muted">万物都可def</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/mysql/1.htm">mysql</a>
                        <div>re正则的详细讲解文章目录re正则的详细讲解前言4.re正则表达式(1)e正则的匹配模式(2)re.search的使用(3)re.findall()的使用(4)re.sub()的使用结语前言大家好,今天我将开始更新python爬虫篇,陆续更新几种解析数据的方法,例如re正则表达式beautifulsoupxpathlxml等等,以及selenium自动化的使用,scrapy爬虫框架的使用等等.还会</div>
                    </li>
                    <li><a href="/article/1753600678590169088.htm"
                           title="python中用scrapy框架创建项目" target="_blank">python中用scrapy框架创建项目</a>
                        <span class="text-muted">小沙弥哥</span>

                        <div>最近在学scrapy框架进行简单爬虫学习,在此简单回顾一下创建项目流程思路。首先你的安装scrapy运行环境,在此省略,不懂可以百度。第一步:创建项目在运行环境按住shift键,单击右键选择【在此打开命令窗口】,打开cmd命令框,输入命令:scrapystartprojectqsbk,如下图:第二步创建爬虫,根据提示进入qsbk目录下输入“scrapygenspiderqsbk_spider”,成</div>
                    </li>
                    <li><a href="/article/1753459318692265984.htm"
                           title="大数据毕业设计:python新能源汽车数据分析可视化系统 Django框架 Vue框架 Scrapy爬虫 Echarts可视化 懂车帝(源码)✅" target="_blank">大数据毕业设计:python新能源汽车数据分析可视化系统 Django框架 Vue框架 Scrapy爬虫 Echarts可视化 懂车帝(源码)✅</a>
                        <span class="text-muted">源码之家</span>
<a class="tag" taget="_blank" href="/search/biyesheji0001/1.htm">biyesheji0001</a><a class="tag" taget="_blank" href="/search/biyesheji0002/1.htm">biyesheji0002</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E8%83%BD%E6%BA%90/1.htm">新能源</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E8%83%BD%E6%BA%90%E6%B1%BD%E8%BD%A6/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/%E6%87%82%E8%BD%A6%E5%B8%9D/1.htm">懂车帝</a>
                        <div>博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌毕业设计:2023-2024年计算机毕业设计1000套(建议收藏)毕业设计:2023-2024年最新最全计算机专业毕业设计选题汇总1、项目介绍技术栈:Python语言、Django框架、MySQL数据</div>
                    </li>
                    <li><a href="/article/1753186300967534592.htm"
                           title="scrapy框架下pythom爬虫的数据库(MYSQL)" target="_blank">scrapy框架下pythom爬虫的数据库(MYSQL)</a>
                        <span class="text-muted">744274d471fb</span>

                        <div>本次主要讲述在scrapy框架下pythom爬虫有关mysql数据库的相关内容。首先在MySQL数据库中创建对应的表,注意字段的设计!数据库的信息存在setting里,数据信息host,database,user,password,port等取出打开管道文件pipelien.py,添加一个存储到MySQL数据库中的一个管道类(),我们可以参照管道文件初始化中,自带的管道类Pipeline写法,写一</div>
                    </li>
                    <li><a href="/article/1753001845711716352.htm"
                           title="Python Scrapy 爬虫框架及搭建" target="_blank">Python 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/python/1.htm">python</a><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就是封装好的框架,你可以专心编写爬虫的核心逻辑,无需自己编写与爬虫逻辑无关的代码,套用这个框架就可以实现以上功能——爬取到想要的数据。如果暂时理解不深也没关系,后边会结合实例具体介绍。Python爬虫基本流程A发起请求———B解析内容———C获取响应内容———D保存数据A通过HTTP向目标站点发起请求,即发送一个Request,请求可以包含额外的hea</div>
                    </li>
                    <li><a href="/article/1752877197317652480.htm"
                           title="scrapy框架的学习使用、XPath的基本用法、爬取新闻数据" target="_blank">scrapy框架的学习使用、XPath的基本用法、爬取新闻数据</a>
                        <span class="text-muted">当像鸟飞向你的山</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%88%AC%E5%8F%96/1.htm">数据爬取</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>文章目录声明scrapy基础安装scrapyscrapy原理scrapy应用示例一爬取新闻基础信息1新建项目2创建爬虫3君子协议4爬虫文件解释5分析网站5.1提取数据5.2spider/ucas.py5.3如果遇到反爬5.5运行爬虫6爬取多页7保存数据附录参考声明文章所涉及的内容仅为学习交流所用。scrapy基础scrapy是框架类似于一个工具采用异步框架实现高效率的网络采集最强大的数据采集框架安</div>
                    </li>
                    <li><a href="/article/1752191307842863104.htm"
                           title="文件和图片下载" target="_blank">文件和图片下载</a>
                        <span class="text-muted">垃圾桶边的狗</span>

                        <div>“FilesPipeline和ImagesPipelineScrapy框架内部提供了两个ItemPipeline,专门用于下载文件和图片:●FilesPipeline●ImagesPipeline我们可以将这两个ItemPipeline看作特殊的下载器,用户使用时只需要通过item的一个特殊字段将要下载文件或图片的url传递给它们,它们会自动将文件”“或图片下载到本地,并将下载结果信息存入item</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>