[Scrapy-3] 理解Scrapy的Response的數(shù)據(jù)結(jié)構(gòu)

我們知道酗宋,Scrapy最終給到我們的是response對(duì)象,了解了response的數(shù)據(jù)結(jié)構(gòu),我們就能更好的解析利用response數(shù)據(jù)厚脉。

先來(lái)理解Response這個(gè)類

通過(guò)Response對(duì)象本身可以直接訪問(wèn)的對(duì)象或方法有:

def __init__(self, url, status=200, headers=None, body=b'', flags=None, request=None):
    self.headers = Headers(headers or {})
    self.status = int(status)
    self._set_body(body)
    self._set_url(url)
    self.request = request
    self.flags = [] if flags is None else list(flags)

@property
def meta(self):
    try:
        return self.request.meta
    except AttributeError:
        raise AttributeError(
            "Response.meta not available, this response "
            "is not tied to any request"
        )

url = property(_get_url, obsolete_setter(_set_url, 'url'))

body = property(_get_body, obsolete_setter(_set_body, 'body'))

從上面的代碼可以知道,通過(guò)Response對(duì)象可以直接訪問(wèn)的屬性有headers胶惰,status傻工, requestmeta,meta即是屬性也是方法中捆, url鸯匹, body,以上可以直接獲取內(nèi)容泄伪,還有一些方法比如text()殴蓬,css()xpath()蟋滴,在子類中實(shí)現(xiàn)可以使用染厅。

看看Response的子類

Response
----TextResponse
--------HtmlResponse
--------XmlResponse

HtmlResponseXmlResponse兩個(gè)類本身只是簡(jiǎn)單的繼承了TextResponse津函,沒(méi)有做任何實(shí)現(xiàn)肖粮,所以我們重點(diǎn)來(lái)看看TextResponse類。
TextResponse的主要是添加了一個(gè)新的構(gòu)造函數(shù)尔苦,encoding涩馆。這個(gè)暫時(shí)還不能細(xì)致的理解,事實(shí)上對(duì)這個(gè)Python體系的編碼都很暈允坚,先放放吧魂那。
TextResponse對(duì)父類的一些未實(shí)現(xiàn)的方法做了實(shí)現(xiàn):

@property
def text(self):
    """ Body as unicode """
    # access self.encoding before _cached_ubody to make sure
    # _body_inferred_encoding is called
    benc = self.encoding
    if self._cached_ubody is None:
        charset = 'charset=%s' % benc
        self._cached_ubody = html_to_unicode(charset, self.body)[1]
    return self._cached_ubody

@property
def selector(self):
    from scrapy.selector import Selector
    if self._cached_selector is None:
        self._cached_selector = Selector(self)
    return self._cached_selector

def xpath(self, query, **kwargs):
    return self.selector.xpath(query, **kwargs)

def css(self, query):
    return self.selector.css(query)

一般情況下,我們爬取網(wǎng)頁(yè)獲取到的Response對(duì)象是HtmlResponse屋讶,從上面的源碼我們可以知道冰寻,Scrapy的數(shù)組組織結(jié)構(gòu)是Selector

從Html源解析數(shù)據(jù)一般有兩種方式:

  • BeautifulSoup皿渗,這個(gè)類比較有名了斩芭,它對(duì)一些標(biāo)記不規(guī)范的HTML也有很好的適應(yīng)能力,但它最大的缺點(diǎn)就是--太慢了乐疆。
  • lxml划乖,這是一個(gè)xml解析庫(kù),當(dāng)然也能用來(lái)解析html挤土,lxml并不是Python的標(biāo)準(zhǔn)庫(kù)琴庵,但是它有基于ElementTree的極具Python風(fēng)格的API。

Scrapy的Selector是基于lxml構(gòu)建的仰美,所以在速度和解析精度上和lxml相似迷殿。

雖然lxml的語(yǔ)法很強(qiáng)大,能夠處理很多其它的任務(wù)咖杂,但是在這里庆寺,Selector的語(yǔ)法就很簡(jiǎn)單,這也決定了Selector的解析方式诉字。
Seelctor或者說(shuō)Scrapy的數(shù)據(jù)對(duì)象有以下三種解析方式

  • xpath
  • css
  • re

這個(gè)從Selector的源碼可以看出懦尝,不喜歡cssre(主要是太麻煩了知纷,記得東西太多,每次用還要現(xiàn)學(xué))陵霉,我們數(shù)據(jù)解析的話就專門使用xpath琅轧,下一節(jié)就來(lái)好好學(xué)習(xí)學(xué)習(xí)xpath的語(yǔ)法。

def css(self, query):
    """
    Apply the given CSS selector and return a :class:`SelectorList` instance.

    ``query`` is a string containing the CSS selector to apply.

    In the background, CSS queries are translated into XPath queries using
    `cssselect`_ library and run ``.xpath()`` method.
    """
    return self.xpath(self._css2xpath(query))

發(fā)現(xiàn)個(gè)比較變態(tài)的踊挠,css底層實(shí)現(xiàn)也是先將css轉(zhuǎn)成xpath乍桂。那就不需要多此一舉了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末止毕,一起剝皮案震驚了整個(gè)濱河市模蜡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扁凛,老刑警劉巖忍疾,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谨朝,居然都是意外死亡卤妒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門字币,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)则披,“玉大人,你說(shuō)我怎么就攤上這事洗出∈扛矗” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵翩活,是天一觀的道長(zhǎng)阱洪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)菠镇,這世上最難降的妖魔是什么冗荸? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮利耍,結(jié)果婚禮上蚌本,老公的妹妹穿的比我還像新娘。我一直安慰自己隘梨,他們只是感情好程癌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著轴猎,像睡著了一般席楚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上税稼,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天烦秩,我揣著相機(jī)與錄音,去河邊找鬼郎仆。 笑死只祠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扰肌。 我是一名探鬼主播抛寝,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼曙旭!你這毒婦竟也來(lái)了盗舰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤桂躏,失蹤者是張志新(化名)和其女友劉穎钻趋,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剂习,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛮位,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳞绕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片失仁。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖们何,靈堂內(nèi)的尸體忽然破棺而出萄焦,到底是詐尸還是另有隱情,我是刑警寧澤冤竹,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布拂封,位于F島的核電站,受9級(jí)特大地震影響贴见,放射性物質(zhì)發(fā)生泄漏烘苹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一片部、第九天 我趴在偏房一處隱蔽的房頂上張望镣衡。 院中可真熱鬧,春花似錦档悠、人聲如沸廊鸥。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惰说。三九已至,卻和暖如春缘回,著一層夾襖步出監(jiān)牢的瞬間吆视,已是汗流浹背典挑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啦吧,地道東北人您觉。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像授滓,于是被迫代替她去往敵國(guó)和親琳水。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 12,655評(píng)論 4 46
  • scrapy是python最有名的爬蟲框架之一般堆,可以很方便的進(jìn)行web抓取在孝,并且提供了很強(qiáng)的定制型,這里記錄簡(jiǎn)單學(xué)...
    bomo閱讀 2,088評(píng)論 1 11
  • Python版本管理:pyenv和pyenv-virtualenvScrapy爬蟲入門教程一 安裝和基本使用Scr...
    inke閱讀 66,519評(píng)論 3 38
  • 2017年10月14日 多云到晴 熟悉的街道 走遠(yuǎn) 鄉(xiāng)音 存在千里 背靠著疾馳的巴士 想著一句問(wèn)候語(yǔ) 恭候多時(shí) 抱...
    鮮栗子閱讀 216評(píng)論 0 0
  • 第十八講何為異常:異常與否不過(guò)是一種人類的自覺(jué)淮摔,常常受‘社會(huì)規(guī)范私沮、目標(biāo)對(duì)象的個(gè)性、背景’等因素的影響; 目前心理學(xué)...
    小葵愛(ài)書閱讀 2,594評(píng)論 1 17