博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scrapy中关于Item与数据入库的坑
阅读量:6147 次
发布时间:2019-06-21

本文共 1667 字,大约阅读时间需要 5 分钟。

hot3.png

常见报错信息

报错信息:

Operand should contain 1 column(s)

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


报错信息:

data too long

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


报错信息:

[Failure instance: Traceback: 
: 'job_name'

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


常见数据处理方法

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

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

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

2.员工饭堂物料的购买

3.员工食堂卫生

对应的html结构如下:

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

2.员工饭堂物料的购买
3.员工食堂卫生

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

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

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

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

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

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

在广西人才网这个爬虫中,我的做法是用.join()方法来清除<br>,.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):        """        文本中包含有
标签的话,传值到itme中就不会是整个文本,而是一条一条的数据 保存到数据库的时候会报错:Operand should contain 1 column(s) 那就要将文本里面的
换成其他,由于传递过来的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://my.oschina.net/RanboSpider/blog/1608196

你可能感兴趣的文章
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>
fabric上下文管理器(context mangers)
查看>>
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
php小知识
查看>>
Windows下安装、运行Lua
查看>>
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(二)
查看>>
初识中间件之消息队列
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
Spring常用注解
查看>>
我的友情链接
查看>>
PCS子层有什么用?
查看>>
查看端口,关闭端口
查看>>
代码托管平台简介
查看>>