国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python Scrapy爬蟲框架學習

harriszh / 1629人閱讀

摘要:組件引擎負責控制數據流在系統中所有組件中流動,并在相應動作發生時觸發事件。下載器下載器負責獲取頁面數據并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。

Scrapy 是用Python實現一個為爬取網站數據、提取結構性數據而編寫的應用框架。

一、Scrapy框架簡介

Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。

其最初是為了 頁面抓取 (更確切來說, 網絡抓取 )所設計的, 也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。

二、架構流程圖

接下來的圖表展現了Scrapy的架構,包括組件及在系統中發生的數據流的概覽(綠色箭頭所示)。 下面對每個組件都做了簡單介紹,并給出了詳細內容的鏈接。數據流如下所描述。

1、組件 Scrapy Engine

引擎負責控制數據流在系統中所有組件中流動,并在相應動作發生時觸發事件。 詳細內容查看下面的數據流(Data Flow)部分。

調度器(Scheduler)

調度器從引擎接受request并將他們入隊,以便之后引擎請求他們時提供給引擎。

下載器(Downloader)

下載器負責獲取頁面數據并提供給引擎,而后提供給spider。

Spiders

Spider是Scrapy用戶編寫用于分析response并提取item(即獲取到的item)或額外跟進的URL的類。 每個spider負責處理一個特定(或一些)網站。 更多內容請看 Spiders 。

Item Pipeline

Item Pipeline負責處理被spider提取出來的item。典型的處理有清理、 驗證及持久化(例如存取到數據庫中)。 更多內容查看 Item Pipeline 。

下載器中間件(Downloader middlewares)

下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。更多內容請看 下載器中間件(Downloader Middleware) 。

Spider中間件(Spider middlewares)

Spider中間件是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。更多內容請看 Spider中間件(Middleware) 。

2、數據流(Data flow)

Scrapy中的數據流由執行引擎控制,其過程如下:

引擎打開一個網站(open a domain),找到處理該網站的Spider并向該spider請求第一個要爬取的URL(s)。

引擎從Spider中獲取到第一個要爬取的URL并在調度器(Scheduler)以Request調度。

引擎向調度器請求下一個要爬取的URL。

調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。

一旦頁面下載完畢,下載器生成一個該頁面的Response,并將其通過下載中間件(返回(response)方向)發送給引擎。

引擎從下載器中接收到Response并通過Spider中間件(輸入方向)發送給Spider處理。

Spider處理Response并返回爬取到的Item及(跟進的)新的Request給引擎。

引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。

(從第二步)重復直到調度器中沒有更多地request,引擎關閉該網站。

3、事件驅動網絡(Event-driven networking)

Scrapy基于事件驅動網絡框架 Twisted 編寫。因此,Scrapy基于并發性考慮由非阻塞(即異步)的實現。

關于異步編程及Twisted更多的內容請查看下列鏈接:

三、4步制作爬蟲

新建項目(scrapy startproject xxx):新建一個新的爬蟲項目

明確目標(編寫items.py):明確你想要抓取的目標

制作爬蟲(spiders/xxsp der.py):制作爬蟲開始爬取網頁

存儲內容(pipelines.py):設計管道存儲爬取內容

四、安裝框架

這里我們使用 conda 來進行安裝:

conda install scrapy

或者使用 pip 進行安裝:

pip install scrapy

查看安裝:

?  spider scrapy -h
Scrapy 1.4.0 - no active project

Usage:
  scrapy  [options] [args]

Available commands:
  bench         Run quick benchmark test
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

  [ more ]      More commands available when run from project directory

Use "scrapy  -h" to see more info about a command
1.創建項目
?  spider scrapy startproject SF
New Scrapy project "SF", using template directory "/Users/kaiyiwang/anaconda2/lib/python2.7/site-packages/scrapy/templates/project", created in:
    /Users/kaiyiwang/Code/python/spider/SF

You can start your first spider with:
    cd SF
    scrapy genspider example example.com
?  spider

使用 tree 命令可以查看項目結構:

?  SF tree
.
├── SF
│?? ├── __init__.py
│?? ├── items.py
│?? ├── middlewares.py
│?? ├── pipelines.py
│?? ├── settings.py
│?? └── spiders
│??     └── __init__.py
└── scrapy.cfg

2.在spiders 目錄下創建模板
?  spiders scrapy genspider sf "https://segmentfault.com"
Created spider "sf" using template "basic" in module:
  SF.spiders.sf
?  spiders

這樣,就生成了一個項目文件 sf.py

# -*- coding: utf-8 -*-
import scrapy
from SF.items import SfItem


class SfSpider(scrapy.Spider):
    name = "sf"
    allowed_domains = ["https://segmentfault.com"]
    start_urls = ["https://segmentfault.com/"]

    def parse(self, response):
        # print response.body
        # pass
        node_list = response.xpath("http://h2[@class="title"]")

        # 用來存儲所有的item字段的
        # items = []
        for node in node_list:
            # 創建item字段對象,用來存儲信息
            item = SfItem()
            # .extract() 將xpath對象轉換為 Unicode字符串
            title = node.xpath("./a/text()").extract()

            item["title"] = title[0]

            # 返回抓取到的item數據,給管道文件處理,同時還回來繼續執行后邊的代碼
            yield.item
            #return item
            #return scrapy.Request(url)
            #items.append(item)





命令:

# 測試爬蟲是否正常, sf為爬蟲的名稱
?  scrapy check sf

# 運行爬蟲
?  scrapy crawl sf
3.item pipeline

當 item 在Spider中被收集之后,它將會被傳遞到 item Pipeline, 這些 item Pipeline 組件按定義的順序處理 item.

每個 Item Pipeline 都是實現了簡單方法的Python 類,比如決定此Item是丟棄或存儲,以下是 item pipeline 的一些典型應用:

驗證爬取得數據(檢查item包含某些字段,比如說name字段)

查重(并丟棄)

將爬取結果保存到文件或者數據庫總(數據持久化)

編寫 item pipeline
編寫 item pipeline 很簡單,item pipeline 組件是一個獨立的Python類,其中 process_item()方法必須實現。

from scrapy.exceptions import DropItem

class PricePipeline(object):

    vat_factor = 1.15

    def process_item(self, item, spider):
        if item["price"]:
            if item["price_excludes_vat"]:
                item["price"] = item["price"] * self.vat_factor
            return item
        else:
            raise DropItem("Missing price in %s" % item)
4.選擇器(Selectors)

當抓取網頁時,你做的最常見的任務是從HTML源碼中提取數據。
Selector 有四個基本的方法,最常用的還是Xpath

xpath():傳入xpath表達式,返回該表達式所對應的所有節點的selector list 列表。

extract(): 序列化該節點為Unicode字符串并返回list

css():傳入CSS表達式,返回該表達式所對應的所有節點的selector list 列表,語法同 BeautifulSoup4

re():根據傳入的正則表達式對數據進行提取,返回Unicode 字符串list 列表

Scrapy提取數據有自己的一套機制。它們被稱作選擇器(seletors),因為他們通過特定的 XPath 或者 CSS 表達式來“選擇” HTML文件中的某個部分。

XPath 是一門用來在XML文件中選擇節點的語言,也可以用在HTML上。 CSS 是一門將HTML文檔樣式化的語言。選擇器由它定義,并與特定的HTML元素的樣式相關連。

Scrapy選擇器構建于 lxml 庫之上,這意味著它們在速度和解析準確性上非常相似。

XPath表達式的例子

/html/head/title: 選擇文檔中標簽內的元素
/html/head/title/text(): 選擇上面提到的<title>元素的問題
//td: 選擇所有的<td> 元素
//div[@class="mine"]:選擇所有具有 class="mine" 屬性的 div 元素</pre>
<p>更多XPath 語法總結請看這里。</p>
<b>五、爬取招聘信息</b>
<b>1.爬取騰訊招聘信息</b>
<p>爬取的地址:http://hr.tencent.com/positio...</p>
<b>1.1 創建項目</b>
<pre>> scrapy startproject Tencent

You can start your first spider with:
    cd Tencent
    scrapy genspider example example.com</pre>
<p><script type="text/javascript">showImg("https://segmentfault.com/img/bVZA6N?w=452&h=200");</script></p>
<p>需要抓取網頁的元素:</p>
<p><script type="text/javascript">showImg("https://segmentfault.com/img/bVZA6V?w=845&h=572");</script></p>
<p>我們需要爬取以下信息:<br>職位名:positionName<br>職位鏈接:positionLink<br>職位類型:positionType<br>職位人數:positionNumber<br>工作地點:workLocation<br>發布時點:publishTime</p>
<p>在 <b>items.py</b> 文件中定義爬取的字段:</p>
<pre># -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy

# 定義字段
class TencentItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()

    # 職位名
    positionName = scrapy.Field()

    # 職位鏈接
    positionLink = scrapy.Field()

    # 職位類型
    positionType = scrapy.Field()

    # 職位人數
    positionNumber = scrapy.Field()

    # 工作地點
    workLocation = scrapy.Field()

    # 發布時點
    publishTime = scrapy.Field()

    pass
</pre>
<b>1.2 寫spider爬蟲</b>
<p>使用命令創建</p>
<pre>?  Tencent scrapy genspider tencent "tencent.com"
Created spider "tencent" using template "basic" in module:
  Tencent.spiders.tencent</pre>
<p>生成的 spider 在當前目錄下的 <b>spiders/tencent.py</b></p>
<pre>?  Tencent tree
.
├── __init__.py
├── __init__.pyc
├── items.py
├── middlewares.py
├── pipelines.py
├── settings.py
├── settings.pyc
└── spiders
    ├── __init__.py
    ├── __init__.pyc
    └── tencent.py</pre>
<p>我們可以看下生成的這個初始化文件 <b>tencent.py</b></p>
<pre># -*- coding: utf-8 -*-
import scrapy


class TencentSpider(scrapy.Spider):
    name = "tencent"
    allowed_domains = ["tencent.com"]
    start_urls = ["http://tencent.com/"]

    def parse(self, response):
        pass
</pre>
<p>對初識文件<b>tencent.py</b>進行修改:</p>
<pre># -*- coding: utf-8 -*-
import scrapy
from Tencent.items import TencentItem

class TencentSpider(scrapy.Spider):
    name = "tencent"
    allowed_domains = ["tencent.com"]
    baseURL = "http://hr.tencent.com/position.php?&start="
    offset = 0  # 偏移量
    start_urls = [baseURL + str(offset)]

    def parse(self, response):

        # 請求響應
        # node_list = response.xpath("http://tr[@class="even"] or //tr[@class="odd"]")
         node_list = response.xpath("http://tr[@class="even"] | //tr[@class="odd"]")

        for node in node_list:
            item = TencentItem()   # 引入字段類

            # 文本內容, 取列表的第一個元素[0], 并且將提取出來的Unicode編碼 轉為 utf-8
            item["positionName"] = node.xpath("./td[1]/a/text()").extract()[0].encode("utf-8")
            item["positionLink"] = node.xpath("./td[1]/a/@href").extract()[0].encode("utf-8")         # 鏈接屬性
            item["positionType"] = node.xpath("./td[2]/text()").extract()[0].encode("utf-8")
            item["positionNumber"] = node.xpath("./td[3]/text()").extract()[0].encode("utf-8")
            item["workLocation"] = node.xpath("./td[4]/text()").extract()[0].encode("utf-8")
            item["publishTime"] = node.xpath("./td[5]/text()").extract()[0].encode("utf-8")

            # 返回給管道處理
            yield item

        # 先爬 2000 頁數據
        if self.offset < 2000:
            self.offset += 10
            url = self.baseURL + self.offset
            yield scrapy.Request(url, callback = self.parse)






        #pass
</pre>
<p>寫管道文件 <b>pipelines.py</b>:</p>
<pre># -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

import json

class TencentPipeline(object):
    def __init__(self):
        self.f = open("tencent.json", "w")

    # 所有的item使用共同的管道
    def process_item(self, item, spider):
        content = json.dumps(dict(item), ensure_ascii = False) + ",
"
        self.f.write(content)
        return item

    def close_spider(self, spider):
        self.f.close()

</pre>
<p>管道寫好之后,在 <b>settings.py</b> 中啟用管道</p>
<pre># Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    "Tencent.pipelines.TencentPipeline": 300,
}</pre>
<p>運行:</p>
<pre>> scrapy crawl tencent

File "/Users/kaiyiwang/Code/python/spider/Tencent/Tencent/spiders/tencent.py", line 21, in parse
    item["positionName"] = node.xpath("./td[1]/a/text()").extract()[0].encode("utf-8")
IndexError: list index out of range</pre>
<p>請求響應這里寫的有問題,Xpath或應該為這種寫法:</p>
<pre>  # 請求響應
        # node_list = response.xpath("http://tr[@class="even"] or //tr[@class="odd"]")
         node_list = response.xpath("http://tr[@class="even"] | //tr[@class="odd"]")
</pre>
<p>然后再執行命令:</p>
<pre>> scrapy crawl tencent</pre>
<p>執行結果文件 <b>tencent.json</b> :</p>
<pre>{"positionName": "23673-財經運營中心熱點運營組編輯", "publishTime": "2017-12-02", "positionLink": "position_detail.php?id=32718&keywords=&tid=0&lid=0", "positionType": "內容編輯類", "workLocation": "北京", "positionNumber": "1"},
{"positionName": "MIG03-騰訊地圖高級算法評測工程師(北京)", "publishTime": "2017-12-02", "positionLink": "position_detail.php?id=30276&keywords=&tid=0&lid=0", "positionType": "技術類", "workLocation": "北京", "positionNumber": "1"},
{"positionName": "MIG10-微回收渠道產品運營經理(深圳)", "publishTime": "2017-12-02", "positionLink": "position_detail.php?id=32720&keywords=&tid=0&lid=0", "positionType": "產品/項目類", "workLocation": "深圳", "positionNumber": "1"},
{"positionName": "MIG03-iOS測試開發工程師(北京)", "publishTime": "2017-12-02", "positionLink": "position_detail.php?id=32715&keywords=&tid=0&lid=0", "positionType": "技術類", "workLocation": "北京", "positionNumber": "1"},
{"positionName": "19332-高級PHP開發工程師(上海)", "publishTime": "2017-12-02", "positionLink": "position_detail.php?id=31967&keywords=&tid=0&lid=0", "positionType": "技術類", "workLocation": "上海", "positionNumber": "2"}</pre>
<b>1.3 通過下一頁爬取</b>
<p>我們上邊是通過總的頁數來抓取每頁數據的,但是沒有考慮到每天的數據是變化的,所以,需要爬取的總頁數不能寫死,那該怎么判斷是否爬完了數據呢?其實很簡單,我們可以根據<b>下一頁</b>來爬取,只要下一頁沒有數據了,就說明數據已經爬完了。</p>
<p><script type="text/javascript">showImg("https://segmentfault.com/img/bVZBru?w=837&h=258");</script></p>
<p>我們通過 <b>下一頁</b> 看下最后一頁的特征:</p>
<p><script type="text/javascript">showImg("https://segmentfault.com/img/bVZBr3?w=752&h=270");</script></p>
<p>下一頁的按鈕為灰色,并且鏈接為 <b>class="noactive"</b>屬性了,我們可以根據此特性來判斷是否到最后一頁了。</p>
<pre> # 寫死總頁數,先爬 100 頁數據
        """
  
        if self.offset < 100:
            self.offset += 10
            url = self.baseURL + str(self.offset)
            yield scrapy.Request(url, callback = self.parse)
        """


        # 使用下一頁爬取數據
        if len(response.xpath("http://a[@class="noactive" and @id="next"]")) == 0:
            url = response.xpath("http://a[@id="next"]/@href").extract()[0]
            yield scrapy.Request("http://hr.tencent.com/" + url, callback = self.parse)</pre>
<p>修改后的<b>tencent.py</b>文件:</p>
<pre># -*- coding: utf-8 -*-
import scrapy
from Tencent.items import TencentItem

class TencentSpider(scrapy.Spider):
    # 爬蟲名
    name = "tencent"
    # 爬蟲爬取數據的域范圍
    allowed_domains = ["tencent.com"]
    # 1.需要拼接的URL
    baseURL = "http://hr.tencent.com/position.php?&start="
    # 需要拼接的URL地址的偏移量
    offset = 0  # 偏移量

    # 爬蟲啟動時,讀取的URL地址列表
    start_urls = [baseURL + str(offset)]

    # 用來處理response
    def parse(self, response):

        # 提取每個response的數據
        node_list = response.xpath("http://tr[@class="even"] | //tr[@class="odd"]")

        for node in node_list:

            # 構建item對象,用來保存數據
            item = TencentItem()

            # 文本內容, 取列表的第一個元素[0], 并且將提取出來的Unicode編碼 轉為 utf-8
            print node.xpath("./td[1]/a/text()").extract()

            item["positionName"] = node.xpath("./td[1]/a/text()").extract()[0].encode("utf-8")
            item["positionLink"] = node.xpath("./td[1]/a/@href").extract()[0].encode("utf-8")         # 鏈接屬性

            # 進行是否為空判斷
            if len(node.xpath("./td[2]/text()")):
                item["positionType"] = node.xpath("./td[2]/text()").extract()[0].encode("utf-8")
            else:
                item["positionType"] = ""

            item["positionNumber"] = node.xpath("./td[3]/text()").extract()[0].encode("utf-8")
            item["workLocation"] = node.xpath("./td[4]/text()").extract()[0].encode("utf-8")
            item["publishTime"] = node.xpath("./td[5]/text()").extract()[0].encode("utf-8")

            # yield的重要性,是返回數據后還能回來接著執行代碼,返回給管道處理,如果為return 整個函數都退出了
            yield item

        # 第一種寫法:拼接URL,適用場景:頁面沒有可以點擊的請求鏈接,必須通過拼接URL才能獲取響應
        """
  
        if self.offset < 100:
            self.offset += 10
            url = self.baseURL + str(self.offset)
            yield scrapy.Request(url, callback = self.parse)
        """


        # 第二種寫法:直接從response獲取需要爬取的連接,并發送請求處理,直到連接全部提取完(使用下一頁爬取數據)
        if len(response.xpath("http://a[@class="noactive" and @id="next"]")) == 0:
            url = response.xpath("http://a[@id="next"]/@href").extract()[0]
            yield scrapy.Request("http://hr.tencent.com/" + url, callback = self.parse)


        #pass
</pre>
<p>OK,通過 根據下一頁我們成功爬完招聘信息的所有數據。</p>
<b>1.4 小結</b>
<p>爬蟲步驟:</p>

<p>1.創建項目 scrapy project XXX</p>
<p>2.scarpy genspider xxx "http://www.xxx.com"</p>
<p>3.編寫 items.py, 明確需要提取的數據</p>
<p>4.編寫 <b>spiders/xxx.py</b>, 編寫爬蟲文件,處理請求和響應,<strong>以及提取數據(yield item)</strong>
</p>
<p>5.編寫 <b>pipelines.py</b>, 編寫管道文件,處理spider返回item數據,比如本地數據持久化,寫文件或存到表中。</p>
<p>6.編寫 <b>settings.py</b>,啟動管道組件<b>ITEM_PIPELINES</b>,以及其他相關設置</p>
<p>7.執行爬蟲 <b>scrapy crawl xxx</b>
</p>

<p>有時候被爬取的網站可能做了很多限制,所以,我們請求時可以添加請求報頭,scrapy 給我們提供了一個很方便的報頭配置的地方,<b>settings.py</b> 中,我們可以開啟:</p>
<pre>
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = "Tencent (+http://www.yourdomain.com)"
User-AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)
              AppleWebKit/537.36 (KHTML, like Gecko)
              Chrome/62.0.3202.94 Safari/537.36"


# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
   "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
   "Accept-Language": "en",
}</pre>
<p>scrapy 最大的適用場景是爬取靜態頁面,性能非常強悍,但如果要爬取動態的json數據,那就沒必要了。</p>
<hr>
<p>相關文章:</p>
<p>Scrapy入門教程</p>           
               
                                           
                       
                 </div>
            
                     <div   id="77l7j7h"   class="mt-64 tags-seach" >
                 <div   id="775plft"   class="tags-info">
                                                                                                                    
                         <a style="width:120px;" title="GPU云服務器" href="http://specialneedsforspecialkids.com/site/product/gpu.html">GPU云服務器</a>
                                             
                         <a style="width:120px;" title="云服務器" href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo">云服務器</a>
                                                                                                                                                 
                                      
                     
                    
                                                                                               <a style="width:120px;" title="python爬蟲框架scrapy" href="http://specialneedsforspecialkids.com/yun/tag/pythonpachongkuangjiascrapy/">python爬蟲框架scrapy</a>
                                                                                                           <a style="width:120px;" title="爬蟲框架scrapy" href="http://specialneedsforspecialkids.com/yun/tag/pachongkuangjiascrapy/">爬蟲框架scrapy</a>
                                                                                                           <a style="width:120px;" title="scrapy框架編寫爬蟲" href="http://specialneedsforspecialkids.com/yun/tag/scrapykuangjiabianxiepachong/">scrapy框架編寫爬蟲</a>
                                                                                                           <a style="width:120px;" title="python爬蟲scrapy" href="http://specialneedsforspecialkids.com/yun/tag/pythonpachongscrapy/">python爬蟲scrapy</a>
                                                         
                 </div>
               
              </div>
             
               <div   id="njfbzpt"   class="entry-copyright mb-30">
                   <p class="mb-15"> 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。</p>
                 
                   <p>轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44467.html</p>
               </div>
                      
               <ul class="pre-next-page">
                 
                                  <li id="dx7l7f5"    class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/44466.html">上一篇:Python 面向對象編程指南 讀書筆記</a></li>  
                                                
                                       <li id="vdl5jnt"    class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/44468.html">下一篇:python讀excel寫入mysql小工具</a></li>
                                  </ul>
              </div>
              <div   id="bjr57b5"   class="about_topicone-mid">
                <h3 class="top-com-title mb-0"><span data-id="0">相關文章</span></h3>
                <ul class="com_white-left-mid atricle-list-box">
                             
                                                                    <li>
                                                <div   id="jnxjxpr"   class="atricle-list-right">
                          <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/44625.html"><b><em>Python</em><em>爬蟲</em>之<em>Scrapy</em><em>學習</em>(基礎篇)</b></a></h2>
                                                     <p class="ellipsis2 good">摘要:下載器下載器負責獲取頁面數據并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。一旦頁面下載完畢,下載器生成一個該頁面的,并將其通過下載中間件返回方向發送給引擎。

作者:xiaoyu微信公眾號:Python數據科學知乎:Python數據分析師

在爬蟲的路上,學習scrapy是一個必不可少的環節。也許有好多朋友此時此刻也正在接觸并學習sc...</p>
                                                   
                          <div   id="77t7dvd"   class="com_white-left-info">
                                <div   id="xrnxhbj"   class="com_white-left-infol">
                                    <a href="http://specialneedsforspecialkids.com/yun/u-1360.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/13/small_000001360.jpg" alt=""><span id="bx7frxb"    class="layui-hide64">pkhope</span></a>
                                    <time datetime="">2019-07-31 11:05</time>
                                    <span><i class="fa fa-commenting"></i>評論0</span> 
                                    <span><i class="fa fa-star"></i>收藏0</span> 
                                </div>
                          </div>
                      </div>
                    </li> 
                                                                                       <li>
                                                <div   id="fjt7jb5"   class="atricle-list-right">
                          <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/38430.html"><b>零基礎如何學<em>爬蟲</em>技術</b></a></h2>
                                                     <p class="ellipsis2 good">摘要:楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,。本文來源知乎作者路人甲鏈接楚江數據提供網站數據采集和爬蟲軟件定制開發服務,服務范圍涵蓋社交網絡電子商務分類信息學術研究等。

楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,http://www.chujiangdata.com。
第一:Python爬蟲學習系列教程(來源于某博主:htt...</p>
                                                   
                          <div   id="tjh5t5h"   class="com_white-left-info">
                                <div   id="7xzv75b"   class="com_white-left-infol">
                                    <a href="http://specialneedsforspecialkids.com/yun/u-128.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/01/small_000000128.jpg" alt=""><span id="b7ffdjb"    class="layui-hide64">KunMinX</span></a>
                                    <time datetime="">2019-07-25 11:29</time>
                                    <span><i class="fa fa-commenting"></i>評論0</span> 
                                    <span><i class="fa fa-star"></i>收藏0</span> 
                                </div>
                          </div>
                      </div>
                    </li> 
                                                                                       <li>
                                                <div   id="pvrpbx7"   class="atricle-list-right">
                          <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/43405.html"><b><em>Python</em><em>爬蟲</em><em>框架</em><em>scrapy</em>入門指引</b></a></h2>
                                                     <p class="ellipsis2 good">摘要:想爬點數據來玩玩,我想最方便的工具就是了。這框架把采集需要用到的功能全部封裝好了,只要寫寫采集規則其他的就交給框架去處理,非常方便,沒有之一,不接受反駁。首先,大概看下這門語言。如果文檔看不懂的話,推薦看看這個教程爬蟲教程

想爬點數據來玩玩, 我想最方便的工具就是Python scrapy了。 這框架把采集需要用到的功能全部封裝好了,只要寫寫采集規則,其他的就交給框架去處理,非常方便,...</p>
                                                   
                          <div   id="hpxjv55"   class="com_white-left-info">
                                <div   id="rj75v5x"   class="com_white-left-infol">
                                    <a href="http://specialneedsforspecialkids.com/yun/u-61.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/00/small_000000061.jpg" alt=""><span id="b5dzx7d"    class="layui-hide64">孫淑建</span></a>
                                    <time datetime="">2019-07-31 10:11</time>
                                    <span><i class="fa fa-commenting"></i>評論0</span> 
                                    <span><i class="fa fa-star"></i>收藏0</span> 
                                </div>
                          </div>
                      </div>
                    </li> 
                                                                                       <li>
                                                <div   id="zt7hrxd"   class="atricle-list-right">
                          <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/41386.html"><b><em>Scrapy</em> <em>框架</em>入門簡介</b></a></h2>
                                                     <p class="ellipsis2 good">摘要:解析的方法,每個初始完成下載后將被調用,調用的時候傳入從每一個傳回的對象來作為唯一參數,主要作用如下負責解析返回的網頁數據,提取結構化數據生成生成需要下一頁的請求。

Scrapy 框架
Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,用途非常廣泛。
框架的力量,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常...</p>
                                                   
                          <div   id="lhpzv7p"   class="com_white-left-info">
                                <div   id="ntdpltv"   class="com_white-left-infol">
                                    <a href="http://specialneedsforspecialkids.com/yun/u-1504.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/15/small_000001504.jpg" alt=""><span id="btdnndv"    class="layui-hide64">Coding01</span></a>
                                    <time datetime="">2019-07-30 15:39</time>
                                    <span><i class="fa fa-commenting"></i>評論0</span> 
                                    <span><i class="fa fa-star"></i>收藏0</span> 
                                </div>
                          </div>
                      </div>
                    </li> 
                                                                                                           
                </ul>
              </div>
              
               <div   id="xz7bhx5"   class="topicone-box-wangeditor">
                  
                  <h3 class="top-com-title mb-64"><span>發表評論</span></h3>
                   <div   id="xb5hrxp"   class="xcp-publish-main flex_box_zd">
                                      
                      <div   id="vpxvjrv"   class="unlogin-pinglun-box">
                        <a href="javascript:login()" class="grad">登陸后可評論</a>
                      </div>                   </div>
               </div>
              <div   id="xpn5j57"   class="site-box-content">
                <div   id="zhjtfb5"   class="site-content-title">
                  <h3 class="top-com-title mb-64"><span>0條評論</span></h3>   
                </div> 
                      <div   id="rxhhfrj"   class="pages"></ul></div>
              </div>
           </div>
           <div   id="lfbzfbv"   class="layui-col-md4 layui-col-lg3 com_white-right site-wrap-right">
              <div   id="rxjtfj7"   class=""> 
                <div   id="v7bl5rl"   class="com_layuiright-box user-msgbox">
                    <a href="http://specialneedsforspecialkids.com/yun/u-227.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/02/small_000000227.jpg" alt=""></a>
                    <h3><a href="http://specialneedsforspecialkids.com/yun/u-227.html" rel="nofollow">harriszh</a></h3>
                    <h6>男<span>|</span>高級講師</h6>
                    <div   id="9zvrn7x"   class="flex_box_zd user-msgbox-atten">
                     
                                                                      <a href="javascript:attentto_user(227)" id="attenttouser_227" class="grad follow-btn notfollow attention">我要關注</a>
      
                                                                                        <a href="javascript:login()" title="發私信" >我要私信</a>
                     
                                            
                    </div>
                    <div   id="pfnl57z"   class="user-msgbox-list flex_box_zd">
                          <h3 class="hpf">TA的文章</h3>
                          <a href="http://specialneedsforspecialkids.com/yun/ut-227.html" class="box_hxjz">閱讀更多</a>
                    </div>
                      <ul class="user-msgbox-ul">
                                                  <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/116822.html">BUI Webapp用于項目中的一點小心得</a></h3>
                            <p>閱讀 1682<span>·</span>2019-08-30 15:54</p></li>
                                                       <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/110130.html">前端面試題總結——綜合問題(持續更新中)</a></h3>
                            <p>閱讀 3332<span>·</span>2019-08-26 17:15</p></li>
                                                       <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/109592.html">在瀏覽器調起本地應用的方法</a></h3>
                            <p>閱讀 3522<span>·</span>2019-08-26 13:49</p></li>
                                                       <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/109211.html">leetcode 鏈表相關題目解析</a></h3>
                            <p>閱讀 2582<span>·</span>2019-08-26 13:38</p></li>
                                                       <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/108092.html">【刷算法】丑數</a></h3>
                            <p>閱讀 2291<span>·</span>2019-08-26 12:08</p></li>
                                                       <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/106603.html">webstorm預覽html配置localhost為本機ip地址</a></h3>
                            <p>閱讀 3035<span>·</span>2019-08-26 10:41</p></li>
                                                       <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/106130.html">籃球即時比分api接口調用示例代碼</a></h3>
                            <p>閱讀 1369<span>·</span>2019-08-26 10:24</p></li>
                                                       <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/105498.html">Webpack包教不包會</a></h3>
                            <p>閱讀 3376<span>·</span>2019-08-23 18:35</p></li>
                                                
                      </ul>
                </div>

                   <!-- 文章詳情右側廣告-->
              
  <div   id="fnzf7r7"   class="com_layuiright-box">
                  <h6 class="top-com-title"><span>最新活動</span></h6> 
           
         <div   id="ptdlxfx"   class="com_adbox">
                    <div   id="bh77nl5"   class="layui-carousel" id="right-item">
                      <div carousel-item>
                                                                                                                       <div>
                          <a href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo"  rel="nofollow">
                            <img src="http://specialneedsforspecialkids.com/yun/data/attach/240625/2rTjEHmi.png" alt="云服務器">                                 
                          </a>
                        </div>
                                                <div>
                          <a href="http://specialneedsforspecialkids.com/site/product/gpu.html"  rel="nofollow">
                            <img src="http://specialneedsforspecialkids.com/yun/data/attach/240807/7NjZjdrd.png" alt="GPU云服務器">                                 
                          </a>
                        </div>
                                                                   
                    
                        
                      </div>
                    </div>
                      
                    </div>                    <!-- banner結束 -->
              
<div   id="fvhhpvx"   class="adhtml">

</div>
                <script>
                $(function(){
                    $.ajax({
                        type: "GET",
                                url:"http://specialneedsforspecialkids.com/yun/ad/getad/1.html",
                                cache: false,
                                success: function(text){
                                  $(".adhtml").html(text);
                                }
                        });
                    })
                </script>                </div>              </div>
           </div>
        </div>
      </div> 
    </section>
    <!-- wap拉出按鈕 -->
     <div   id="tx5nlfv"   class="site-tree-mobile layui-hide">
      <i class="layui-icon layui-icon-spread-left"></i>
    </div>
    <!-- wap遮罩層 -->
    <div   id="l5zxjnr"   class="site-mobile-shade"></div>
    
       <!--付費閱讀 -->
       <div   class="vbnxh7t"   id="payread">
         <div   id="dhfrp75"   class="layui-form-item">閱讀需要支付1元查看</div>  
         <div   id="lnt5nfl"   class="layui-form-item"><button class="btn-right">支付并查看</button></div>     
       </div>
      <script>
      var prei=0;

       
       $(".site-seo-depict pre").each(function(){
          var html=$(this).html().replace("<code>","").replace("</code>","").replace('<code class="javascript hljs" codemark="1">','');
          $(this).attr('data-clipboard-text',html).attr("id","pre"+prei);
          $(this).html("").append("<code>"+html+"</code>");
         prei++;
       })
           $(".site-seo-depict img").each(function(){
             
            if($(this).attr("src").indexOf('data:image/svg+xml')!= -1){
                $(this).remove();
            }
       })
     $("LINK[href*='style-49037e4d27.css']").remove();
       $("LINK[href*='markdown_views-d7a94ec6ab.css']").remove();
layui.use(['jquery', 'layer','code'], function(){
  $("pre").attr("class","layui-code");
      $("pre").attr("lay-title","");
       $("pre").attr("lay-skin","");
  layui.code(); 
       $(".layui-code-h3 a").attr("class","copycode").html("復制代碼 ").attr("onclick","copycode(this)");
      
});
function copycode(target){
    var id=$(target).parent().parent().attr("id");
  
                  var clipboard = new ClipboardJS("#"+id);

clipboard.on('success', function(e) {


    e.clearSelection();
    alert("復制成功")
});

clipboard.on('error', function(e) {
    alert("復制失敗")
});
}
//$(".site-seo-depict").html($(".site-seo-depict").html().slice(0, -5));
</script>
  <link rel="stylesheet" type="text/css" href="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/styles/tomorrow-night-eighties.css">
    <script src="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/highlight.pack.js" type="text/javascript"></script>
    <script src="http://specialneedsforspecialkids.com/yun/static/js/clipboard.js"></script>

<script>hljs.initHighlightingOnLoad();</script>

<script>
    function setcode(){
        var _html='';
    	  document.querySelectorAll('pre code').forEach((block) => {
        	  var _tmptext=$.trim($(block).text());
        	  if(_tmptext!=''){
        		  _html=_html+_tmptext;
        		  console.log(_html);
        	  }
    		 
    		  
    		 
      	  });
    	 

    }

</script>

<script>
function payread(){
  layer.open({
      type: 1,
      title:"付費閱讀",
      shadeClose: true,
      content: $('#payread')
    });
}
// 舉報
function jupao_tip(){
  layer.open({
      type: 1,
      title:false,
      shadeClose: true,
      content: $('#jubao')
    });

}
$(".getcommentlist").click(function(){
var _id=$(this).attr("dataid");
var _tid=$(this).attr("datatid");
$("#articlecommentlist"+_id).toggleClass("hide");
var flag=$("#articlecommentlist"+_id).attr("dataflag");
if(flag==1){
flag=0;
}else{
flag=1;
//加載評論
loadarticlecommentlist(_id,_tid);
}
$("#articlecommentlist"+_id).attr("dataflag",flag);

})
$(".add-comment-btn").click(function(){
var _id=$(this).attr("dataid");
$(".formcomment"+_id).toggleClass("hide");
})
$(".btn-sendartcomment").click(function(){
var _aid=$(this).attr("dataid");
var _tid=$(this).attr("datatid");
var _content=$.trim($(".commenttext"+_aid).val());
if(_content==''){
alert("評論內容不能為空");
return false;
}
var touid=$("#btnsendcomment"+_aid).attr("touid");
if(touid==null){
touid=0;
}
addarticlecomment(_tid,_aid,_content,touid);
})
 $(".button_agree").click(function(){
 var supportobj = $(this);
         var tid = $(this).attr("id");
         $.ajax({
         type: "GET",
                 url:"http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxhassupport/" + tid,
                 cache: false,
                 success: function(hassupport){
                 if (hassupport != '1'){






                         $.ajax({
                         type: "GET",
                                 cache:false,
                                 url: "http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxaddsupport/" + tid,
                                 success: function(comments) {

                                 supportobj.find("span").html(comments+"人贊");
                                 }
                         });
                 }else{
                	 alert("您已經贊過");
                 }
                 }
         });
 });
 function attenquestion(_tid,_rs){
    	$.ajax({
    //提交數據的類型 POST GET
    type:"POST",
    //提交的網址
    url:"http://specialneedsforspecialkids.com/yun/favorite/topicadd.html",
    //提交的數據
    data:{tid:_tid,rs:_rs},
    //返回數據的格式
    datatype: "json",//"xml", "html", "script", "json", "jsonp", "text".
    //在請求之前調用的函數
    beforeSend:function(){},
    //成功返回之后調用的函數
    success:function(data){
    	var data=eval("("+data+")");
    	console.log(data)
       if(data.code==2000){
    	layer.msg(data.msg,function(){
    	  if(data.rs==1){
    	      //取消收藏
    	      $(".layui-layer-tips").attr("data-tips","收藏文章");
    	      $(".layui-layer-tips").html('<i class="fa fa-heart-o"></i>');
    	  }
    	   if(data.rs==0){
    	      //收藏成功
    	      $(".layui-layer-tips").attr("data-tips","已收藏文章");
    	      $(".layui-layer-tips").html('<i class="fa fa-heart"></i>')
    	  }
    	})
    	 
       }else{
    	layer.msg(data.msg)
       }


    }   ,
    //調用執行后調用的函數
    complete: function(XMLHttpRequest, textStatus){
     	postadopt=true;
    },
    //調用出錯執行的函數
    error: function(){
        //請求出錯處理
    	postadopt=false;
    }
 });
}
</script>
<footer>
        <div   id="xdp57fp"   class="layui-container">
            <div   id="7vpv5hr"   class="flex_box_zd">
              <div   id="lbb7nnv"   class="left-footer">
                    <h6><a href="http://specialneedsforspecialkids.com/"><img src="http://specialneedsforspecialkids.com/yun/static/theme/ukd//images/logo.png" alt="UCloud (優刻得科技股份有限公司)"></a></h6>
                    <p>UCloud (優刻得科技股份有限公司)是中立、安全的云計算服務平臺,堅持中立,不涉足客戶業務領域。公司自主研發IaaS、PaaS、大數據流通平臺、AI服務平臺等一系列云計算產品,并深入了解互聯網、傳統企業在不同場景下的業務需求,提供公有云、混合云、私有云、專有云在內的綜合性行業解決方案。</p>
              </div>
              <div   id="jlr5rlh"   class="right-footer layui-hidemd">
                  <ul class="flex_box_zd">
                      <li>
                        <h6>UCloud與云服務</h6>
                         <p><a href="http://specialneedsforspecialkids.com/site/about/intro/">公司介紹</a></p>
                         <p><a  >加入我們</a></p>
                         <p><a href="http://specialneedsforspecialkids.com/site/ucan/onlineclass/">UCan線上公開課</a></p>
                         <p><a href="http://specialneedsforspecialkids.com/site/solutions.html" >行業解決方案</a></p>                                                  <p><a href="http://specialneedsforspecialkids.com/site/pro-notice/">產品動態</a></p>
                      </li>
                      <li>
                        <h6>友情鏈接</h6>                                             <p><a >GPU算力平臺</a></p>                                             <p><a >UCloud私有云</a></p>
                                             <p><a >SurferCloud</a></p>                                             <p><a >工廠仿真軟件</a></p>                                             <p><a >Pinex</a></p>                                             <p><a >AI繪畫</a></p>
                                             
                      </li>
                      <li>
                        <h6>社區欄目</h6>
                         <p><a href="http://specialneedsforspecialkids.com/yun/column/index.html">專欄文章</a></p>
                     <p><a href="http://specialneedsforspecialkids.com/yun/udata/">專題地圖</a></p>                      </li>
                      <li>
                        <h6>常見問題</h6>
                         <p><a href="http://specialneedsforspecialkids.com/site/ucsafe/notice.html" >安全中心</a></p>
                         <p><a href="http://specialneedsforspecialkids.com/site/about/news/recent/" >新聞動態</a></p>
                         <p><a href="http://specialneedsforspecialkids.com/site/about/news/report/">媒體動態</a></p>                                                  <p><a href="http://specialneedsforspecialkids.com/site/cases.html">客戶案例</a></p>                                                
                         <p><a href="http://specialneedsforspecialkids.com/site/notice/">公告</a></p>
                      </li>
                      <li>
                          <span><img src="https://static.ucloud.cn/7a4b6983f4b94bcb97380adc5d073865.png" alt="優刻得"></span>
                          <p>掃掃了解更多</p></div>
            </div>
            <div   id="zdrr77d"   class="copyright">Copyright ? 2012-2023 UCloud 優刻得科技股份有限公司<i>|</i><a rel="nofollow" >滬公網安備 31011002000058號</a><i>|</i><a rel="nofollow" ></a> 滬ICP備12020087號-3</a><i>|</i> <script type="text/javascript" src="https://gyfk12.kuaishang.cn/bs/ks.j?cI=197688&fI=125915" charset="utf-8"></script>
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?290c2650b305fc9fff0dbdcafe48b59d";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DZSMXQ3P9N"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-DZSMXQ3P9N');
</script>
<script>
(function(){
var el = document.createElement("script");
el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?99f50ea166557aed914eb4a66a7a70a4709cbb98a54ecb576877d99556fb4bfc3d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a";
el.id = "ttzz";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(el, s);
})(window)
</script></div> 
        </div>
    </footer>

<footer>
<div class="friendship-link">
<p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p>
<a href="http://specialneedsforspecialkids.com/" title="国产xxxx99真实实拍">国产xxxx99真实实拍</a>

<div class="friend-links">

<a href="http://belistarlp.com/">国产黄色在线</a>
</div>
</div>

</footer>

<script>
(function(){
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https') {
        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
    }
    else {
        bp.src = 'http://push.zhanzhang.baidu.com/push.js';
    }
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>
</body><div id="xvhl7" class="pl_css_ganrao" style="display: none;"><form id="xvhl7"></form><div id="xvhl7"><ol id="xvhl7"><optgroup id="xvhl7"><video id="xvhl7"></video></optgroup></ol></div><thead id="xvhl7"><legend id="xvhl7"><label id="xvhl7"><label id="xvhl7"></label></label></legend></thead><optgroup id="xvhl7"></optgroup><strong id="xvhl7"></strong><dfn id="xvhl7"></dfn><menuitem id="xvhl7"></menuitem><optgroup id="xvhl7"><video id="xvhl7"></video></optgroup><pre id="xvhl7"><track id="xvhl7"><tt id="xvhl7"><menuitem id="xvhl7"></menuitem></tt></track></pre><th id="xvhl7"><font id="xvhl7"><progress id="xvhl7"><pre id="xvhl7"></pre></progress></font></th><label id="xvhl7"><strong id="xvhl7"></strong></label><legend id="xvhl7"><dfn id="xvhl7"><dfn id="xvhl7"><ruby id="xvhl7"></ruby></dfn></dfn></legend><label id="xvhl7"><nobr id="xvhl7"><b id="xvhl7"><ins id="xvhl7"></ins></b></nobr></label><mark id="xvhl7"><form id="xvhl7"><legend id="xvhl7"><dfn id="xvhl7"></dfn></legend></form></mark><ruby id="xvhl7"><thead id="xvhl7"></thead></ruby><strike id="xvhl7"><strong id="xvhl7"><optgroup id="xvhl7"><output id="xvhl7"></output></optgroup></strong></strike><sup id="xvhl7"><strong id="xvhl7"><th id="xvhl7"><b id="xvhl7"></b></th></strong></sup><strike id="xvhl7"></strike><sup id="xvhl7"><strong id="xvhl7"><th id="xvhl7"><font id="xvhl7"></font></th></strong></sup><strike id="xvhl7"><var id="xvhl7"></var></strike><track id="xvhl7"></track><em id="xvhl7"><big id="xvhl7"></big></em><track id="xvhl7"></track><font id="xvhl7"></font><i id="xvhl7"><listing id="xvhl7"></listing></i><thead id="xvhl7"><dfn id="xvhl7"><u id="xvhl7"><ruby id="xvhl7"></ruby></u></dfn></thead><p id="xvhl7"><var id="xvhl7"><form id="xvhl7"><ins id="xvhl7"></ins></form></var></p><style id="xvhl7"><th id="xvhl7"></th></style><font id="xvhl7"><progress id="xvhl7"></progress></font><tt id="xvhl7"><mark id="xvhl7"><span id="xvhl7"><legend id="xvhl7"></legend></span></mark></tt><menuitem id="xvhl7"></menuitem><track id="xvhl7"><em id="xvhl7"></em></track><span id="xvhl7"><i id="xvhl7"></i></span><small id="xvhl7"><ins id="xvhl7"><address id="xvhl7"><strike id="xvhl7"></strike></address></ins></small><var id="xvhl7"><small id="xvhl7"><ins id="xvhl7"><address id="xvhl7"></address></ins></small></var><rp id="xvhl7"></rp><form id="xvhl7"><thead id="xvhl7"><dfn id="xvhl7"><strong id="xvhl7"></strong></dfn></thead></form><meter id="xvhl7"></meter><th id="xvhl7"></th><optgroup id="xvhl7"></optgroup><meter id="xvhl7"><acronym id="xvhl7"></acronym></meter><form id="xvhl7"><output id="xvhl7"></output></form><pre id="xvhl7"></pre><th id="xvhl7"><b id="xvhl7"></b></th><rp id="xvhl7"><font id="xvhl7"><progress id="xvhl7"><sup id="xvhl7"></sup></progress></font></rp><label id="xvhl7"><strong id="xvhl7"></strong></label><div id="xvhl7"><ol id="xvhl7"></ol></div><mark id="xvhl7"></mark><ruby id="xvhl7"><thead id="xvhl7"><legend id="xvhl7"><label id="xvhl7"></label></legend></thead></ruby><rp id="xvhl7"><form id="xvhl7"><thead id="xvhl7"><label id="xvhl7"></label></thead></form></rp><label id="xvhl7"></label><strike id="xvhl7"></strike><label id="xvhl7"><rp id="xvhl7"><font id="xvhl7"><progress id="xvhl7"></progress></font></rp></label><optgroup id="xvhl7"></optgroup><div id="xvhl7"><strong id="xvhl7"></strong></div><dfn id="xvhl7"><u id="xvhl7"><ruby id="xvhl7"><thead id="xvhl7"></thead></ruby></u></dfn><style id="xvhl7"><nobr id="xvhl7"></nobr></style><video id="xvhl7"><em id="xvhl7"></em></video><ins id="xvhl7"><address id="xvhl7"></address></ins><u id="xvhl7"></u><label id="xvhl7"><strong id="xvhl7"></strong></label><mark id="xvhl7"><span id="xvhl7"></span></mark><dl id="xvhl7"><i id="xvhl7"><track id="xvhl7"><dfn id="xvhl7"></dfn></track></i></dl><rp id="xvhl7"><font id="xvhl7"></font></rp><strike id="xvhl7"><strong id="xvhl7"><form id="xvhl7"><ins id="xvhl7"></ins></form></strong></strike><sup id="xvhl7"><style id="xvhl7"></style></sup><strike id="xvhl7"></strike><sup id="xvhl7"><strong id="xvhl7"><rp id="xvhl7"><font id="xvhl7"></font></rp></strong></sup><small id="xvhl7"></small><video id="xvhl7"></video><dfn id="xvhl7"><mark id="xvhl7"><span id="xvhl7"><thead id="xvhl7"></thead></span></mark></dfn><small id="xvhl7"><ins id="xvhl7"></ins></small><dfn id="xvhl7"><tt id="xvhl7"><menuitem id="xvhl7"><span id="xvhl7"></span></menuitem></tt></dfn><strong id="xvhl7"><rp id="xvhl7"></rp></strong><menuitem id="xvhl7"></menuitem><var id="xvhl7"><small id="xvhl7"></small></var><form id="xvhl7"></form><pre id="xvhl7"><style id="xvhl7"></style></pre><optgroup id="xvhl7"><video id="xvhl7"><em id="xvhl7"><div id="xvhl7"></div></em></video></optgroup><em id="xvhl7"></em><meter id="xvhl7"></meter><acronym id="xvhl7"><style id="xvhl7"></style></acronym><acronym id="xvhl7"></acronym><label id="xvhl7"></label><big id="xvhl7"><ol id="xvhl7"><i id="xvhl7"><listing id="xvhl7"></listing></i></ol></big><legend id="xvhl7"><sup id="xvhl7"></sup></legend><i id="xvhl7"><track id="xvhl7"></track></i><strike id="xvhl7"><ol id="xvhl7"></ol></strike><thead id="xvhl7"><legend id="xvhl7"><sup id="xvhl7"><label id="xvhl7"></label></sup></legend></thead><thead id="xvhl7"><progress id="xvhl7"><sup id="xvhl7"><style id="xvhl7"></style></sup></progress></thead><u id="xvhl7"></u><thead id="xvhl7"></thead><b id="xvhl7"><meter id="xvhl7"><acronym id="xvhl7"><p id="xvhl7"></p></acronym></meter></b><progress id="xvhl7"><acronym id="xvhl7"></acronym></progress><thead id="xvhl7"><label id="xvhl7"><u id="xvhl7"><ruby id="xvhl7"></ruby></u></label></thead><nobr id="xvhl7"><b id="xvhl7"><meter id="xvhl7"><address id="xvhl7"></address></meter></b></nobr><style id="xvhl7"><th id="xvhl7"></th></style><em id="xvhl7"></em><label id="xvhl7"><strong id="xvhl7"></strong></label><nobr id="xvhl7"><b id="xvhl7"><meter id="xvhl7"><address id="xvhl7"></address></meter></b></nobr><ins id="xvhl7"><address id="xvhl7"></address></ins><label id="xvhl7"><rp id="xvhl7"><b id="xvhl7"><progress id="xvhl7"></progress></b></rp></label><div id="xvhl7"></div><p id="xvhl7"><nobr id="xvhl7"><small id="xvhl7"><ins id="xvhl7"></ins></small></nobr></p><rp id="xvhl7"><thead id="xvhl7"></thead></rp><legend id="xvhl7"><sup id="xvhl7"></sup></legend><dl id="xvhl7"></dl><var id="xvhl7"><form id="xvhl7"><output id="xvhl7"><sub id="xvhl7"></sub></output></form></var><legend id="xvhl7"><sup id="xvhl7"></sup></legend><strong id="xvhl7"><rp id="xvhl7"><thead id="xvhl7"><progress id="xvhl7"></progress></thead></rp></strong><th id="xvhl7"></th><pre id="xvhl7"></pre><sup id="xvhl7"><strong id="xvhl7"><th id="xvhl7"><font id="xvhl7"></font></th></strong></sup><menuitem id="xvhl7"><dl id="xvhl7"><i id="xvhl7"><dfn id="xvhl7"></dfn></i></dl></menuitem><label id="xvhl7"></label><acronym id="xvhl7"><label id="xvhl7"><th id="xvhl7"><small id="xvhl7"></small></th></label></acronym><b id="xvhl7"><meter id="xvhl7"><pre id="xvhl7"><style id="xvhl7"></style></pre></meter></b><dl id="xvhl7"></dl><form id="xvhl7"><ins id="xvhl7"></ins></form><ins id="xvhl7"><pre id="xvhl7"></pre></ins><meter id="xvhl7"></meter><div id="xvhl7"><ol id="xvhl7"></ol></div><rp id="xvhl7"></rp><var id="xvhl7"></var><small id="xvhl7"><meter id="xvhl7"><pre id="xvhl7"><p id="xvhl7"></p></pre></meter></small><strong id="xvhl7"><optgroup id="xvhl7"><output id="xvhl7"><sub id="xvhl7"></sub></output></optgroup></strong><style id="xvhl7"></style><track id="xvhl7"></track><tt id="xvhl7"><mark id="xvhl7"><span id="xvhl7"><thead id="xvhl7"></thead></span></mark></tt><sub id="xvhl7"><div id="xvhl7"><strong id="xvhl7"><pre id="xvhl7"></pre></strong></div></sub><rp id="xvhl7"><thead id="xvhl7"><legend id="xvhl7"><sup id="xvhl7"></sup></legend></thead></rp><strike id="xvhl7"><var id="xvhl7"><small id="xvhl7"><ins id="xvhl7"></ins></small></var></strike><video id="xvhl7"><em id="xvhl7"></em></video><label id="xvhl7"><rp id="xvhl7"></rp></label><sub id="xvhl7"><strike id="xvhl7"><var id="xvhl7"><optgroup id="xvhl7"></optgroup></var></strike></sub><track id="xvhl7"></track><progress id="xvhl7"></progress><acronym id="xvhl7"><style id="xvhl7"><th id="xvhl7"><font id="xvhl7"></font></th></style></acronym><th id="xvhl7"></th><pre id="xvhl7"><track id="xvhl7"></track></pre><video id="xvhl7"></video><sub id="xvhl7"></sub><u id="xvhl7"></u><meter id="xvhl7"><acronym id="xvhl7"><label id="xvhl7"><th id="xvhl7"></th></label></acronym></meter><var id="xvhl7"><small id="xvhl7"><ins id="xvhl7"><sub id="xvhl7"></sub></ins></small></var><optgroup id="xvhl7"><output id="xvhl7"></output></optgroup><ins id="xvhl7"></ins><nobr id="xvhl7"><small id="xvhl7"><meter id="xvhl7"><pre id="xvhl7"></pre></meter></small></nobr><em id="xvhl7"></em><ruby id="xvhl7"><thead id="xvhl7"><legend id="xvhl7"><sup id="xvhl7"></sup></legend></thead></ruby></div>
<script src="http://specialneedsforspecialkids.com/yun/static/theme/ukd/js/common.js"></script>
<<script type="text/javascript">
$(".site-seo-depict *,.site-content-answer-body *,.site-body-depict *").css("max-width","100%");
</script>
</html>