爬虫代码编写中会遇到的字符处理的坑

常见报错信息

报错信息:

Operand should contain 1 column(s)

意思是只能插入单行,不能插入多行数据


报错信息:

data too long 

意思是数据库字段长度不够


报错信息:

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

意思是键值错误,情况一般是CSS选择器在页面获取不到对应的值(比如页面有变化导致不是常规页面)、spider的取值与item的键对应不上、还有后面跟colum的一般是数据库字段与item键对不上


常见数据处理方法

1.文章内容、简介等多行多段的文本数据 [思路来源:传送]

这种数据通常的做法是全部取下来,保留文章里面的html标签(如
\n \r等),在item里面把值转成str类型,存入数据库即可。这里有个新的发现,在爬取广西人才网的时候,它的文本是这样的:

1.负责员工饭堂菜品的烹饪

2.员工饭堂物料的购买

3.员工食堂卫生

对应的html结构如下:

<p id="examineSensitiveWordsContent" style="display: block;">
          1.负责员工饭堂菜品的烹饪
          <br>2.员工饭堂物料的购买
          <br>3.员工食堂卫生
</p>

问题就在这里! 这样的值看似一个完整的文本,但是传递到item后由于
标签的存在,就会变成一条一条的数据:

1.负责员工饭堂菜品的烹饪
2.员工饭堂物料的购买
3.员工食堂卫生

而不是我想象中的一个完整文本:

1.负责员工饭堂菜品的烹饪,2.员工饭堂物料的购买,3.员工食堂卫生

这样的数据存入数据库,就会报错

Operand should contain 1 column(s)
应对这种问题,解决的办法就是在数据传递到item之前,在spider取值的时候就对
进行处理,可以用replace把它替换掉。

在广西人才网这个爬虫中,我的做法是用.join()方法来清除
,.join()的介绍如下:

  • 描述:Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
  • 语法:str.join(sequence)
  • 参数:sequence -- 要连接的元素序列
  • 返回值:返回通过指定字符连接序列中元素后生成的新字符串。

它的代码示例:

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

得到输出是 a-b-c

所以广西人才网爬虫这里,我在spider文件新建一个方法,用于清除br:

    def clear_br(self, value):
        """
        文本中包含有<br>标签的话,传值到itme中就不会是整个文本,而是一条一条的数据
            保存到数据库的时候会报错:Operand should contain 1 column(s)
            那就要将文本里面的<br>换成其他,由于传递过来的value是一个列表list,所以用for循环把元素replace也可以
            这里用.join()方法把列表里的所有元素用逗号拼接成字符串
        """
        value = ','.join(value)
        return value

然后itemloader赋值的时候这样写:

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

意思是在取到文本后调用clear_br函数将list列表里面的元素用逗号拼接,最后返回一个字符串。这样就能达到正常入库的需求了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,423评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,339评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,241评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,503评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,824评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,262评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,615评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,337评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,989评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,300评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,829评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,193评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,753评论 3 230
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,970评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,708评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,295评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,207评论 2 258

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,053评论 0 13
  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,586评论 4 46
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 8,602评论 0 3
  • 276期,感谢1组成员 【日精进打卡第80天】 【知~学习】 《六项精进》读0遍 共77遍 《六项精进》背0遍 共...
    周晨i阅读 223评论 0 0
  • 2017 10 1 祖国生日快乐,祖国繁荣昌盛。 年初就计划今天必须来海南环岛,哪怕是骑个东线也好。 ...
    哲蓝阅读 265评论 0 0