美文网首页
爬虫代码编写中会遇到的字符处理的坑

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

作者: 中乘风 | 来源:发表于2018-07-13 16:12 被阅读0次

    常见报错信息

    报错信息:

    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列表里面的元素用逗号拼接,最后返回一个字符串。这样就能达到正常入库的需求了。

    相关文章

      网友评论

          本文标题:爬虫代码编写中会遇到的字符处理的坑

          本文链接:https://www.haomeiwen.com/subject/aiqspftx.html