爬蟲代碼編寫中會(huì)遇到的字符處理的坑

常見報(bào)錯(cuò)信息

報(bào)錯(cuò)信息:

Operand should contain 1 column(s)

意思是只能插入單行,不能插入多行數(shù)據(jù)


報(bào)錯(cuò)信息:

data too long 

意思是數(shù)據(jù)庫(kù)字段長(zhǎng)度不夠


報(bào)錯(cuò)信息:

[Failure instance: Traceback: <class 'KeyError'>: 'job_name'

意思是鍵值錯(cuò)誤,情況一般是CSS選擇器在頁面獲取不到對(duì)應(yīng)的值(比如頁面有變化導(dǎo)致不是常規(guī)頁面)、spider的取值與item的鍵對(duì)應(yīng)不上、還有后面跟colum的一般是數(shù)據(jù)庫(kù)字段與item鍵對(duì)不上


常見數(shù)據(jù)處理方法

1.文章內(nèi)容、簡(jiǎn)介等多行多段的文本數(shù)據(jù) [思路來源:傳送]

這種數(shù)據(jù)通常的做法是全部取下來,保留文章里面的html標(biāo)簽(如
\n \r等),在item里面把值轉(zhuǎn)成str類型,存入數(shù)據(jù)庫(kù)即可。這里有個(gè)新的發(fā)現(xiàn),在爬取廣西人才網(wǎng)的時(shí)候,它的文本是這樣的:

1.負(fù)責(zé)員工飯?zhí)貌似返呐腼?/p>

2.員工飯?zhí)梦锪系馁?gòu)買

3.員工食堂衛(wèi)生

對(duì)應(yīng)的html結(jié)構(gòu)如下:

<p id="examineSensitiveWordsContent" style="display: block;">
          1.負(fù)責(zé)員工飯?zhí)貌似返呐腼?          <br>2.員工飯?zhí)梦锪系馁?gòu)買
          <br>3.員工食堂衛(wèi)生
</p>

問題就在這里! 這樣的值看似一個(gè)完整的文本,但是傳遞到item后由于
標(biāo)簽的存在,就會(huì)變成一條一條的數(shù)據(jù):

1.負(fù)責(zé)員工飯?zhí)貌似返呐腼?
2.員工飯?zhí)梦锪系馁?gòu)買
3.員工食堂衛(wèi)生

而不是我想象中的一個(gè)完整文本:

1.負(fù)責(zé)員工飯?zhí)貌似返呐腼儯?.員工飯?zhí)梦锪系馁?gòu)買,3.員工食堂衛(wèi)生

這樣的數(shù)據(jù)存入數(shù)據(jù)庫(kù),就會(huì)報(bào)錯(cuò)

Operand should contain 1 column(s)
應(yīng)對(duì)這種問題,解決的辦法就是在數(shù)據(jù)傳遞到item之前,在spider取值的時(shí)候就對(duì)
進(jìn)行處理,可以用replace把它替換掉。

在廣西人才網(wǎng)這個(gè)爬蟲中,我的做法是用.join()方法來清除
,.join()的介紹如下:

  • 描述:Python join() 方法用于將序列中的元素以指定的字符連接生成一個(gè)新的字符串。
  • 語法:str.join(sequence)
  • 參數(shù):sequence -- 要連接的元素序列
  • 返回值:返回通過指定字符連接序列中元素后生成的新字符串。

它的代碼示例:

str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );

得到輸出是 a-b-c

所以廣西人才網(wǎng)爬蟲這里,我在spider文件新建一個(gè)方法,用于清除br:

    def clear_br(self, value):
        """
        文本中包含有<br>標(biāo)簽的話,傳值到itme中就不會(huì)是整個(gè)文本,而是一條一條的數(shù)據(jù)
            保存到數(shù)據(jù)庫(kù)的時(shí)候會(huì)報(bào)錯(cuò):Operand should contain 1 column(s)
            那就要將文本里面的<br>換成其他,由于傳遞過來的value是一個(gè)列表list,所以用for循環(huán)把元素replace也可以
            這里用.join()方法把列表里的所有元素用逗號(hào)拼接成字符串
        """
        value = ','.join(value)
        return value

然后itemloader賦值的時(shí)候這樣寫:

p_centent = response.css('#examineSensitiveWordsContent::text').extract()
        iloaders.add_value("job_content", self.clear_br(p_centent))  # 工作內(nèi)容及要求

意思是在取到文本后調(diào)用clear_br函數(shù)將list列表里面的元素用逗號(hào)拼接,最后返回一個(gè)字符串。這樣就能達(dá)到正常入庫(kù)的需求了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,557評(píng)論 0 13
  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 13,081評(píng)論 4 46
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,851評(píng)論 0 3
  • 276期,感謝1組成員 【日精進(jìn)打卡第80天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》讀0遍 共77遍 《六項(xiàng)精進(jìn)》背0遍 共...
    周晨i閱讀 249評(píng)論 0 0
  • 2017 10 1 祖國(guó)生日快樂,祖國(guó)繁榮昌盛。 年初就計(jì)劃今天必須來海南環(huán)島,哪怕是騎個(gè)東線也好。 ...
    哲藍(lán)閱讀 349評(píng)論 0 0

友情鏈接更多精彩內(nèi)容