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

简介: 常见报错信息报错信息:Operand should contain 1 column(s)意思是只能插入单行,不能插入多行数据报错信息:data too long 意思是数据库字段长度不够报错信息:[Failure instan...

常见报错信息

报错信息:

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

目录
相关文章
|
2月前
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
36 1
|
2月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
44 0
|
10天前
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
37 3
|
4天前
|
数据采集
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
|
2月前
|
数据采集 存储 JSON
解析Perl爬虫代码:使用WWW::Mechanize::PhantomJS库爬取stackoverflow.com的详细步骤
在这篇文章中,我们将探讨如何使用Perl语言和WWW::Mechanize::PhantomJS库来爬取网站数据。我们的目标是爬取stackoverflow.com的内容,同时使用爬虫代理来和多线程技术以提高爬取效率,并将数据存储到本地。
|
数据采集 存储 JSON
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
猜谜游戏在编程语言实践都已经和 HelloWord 程序成为必不可少的新手实践环节,毕竟,它能够让我们基本熟悉 for 循环、变量定义、打印、if else 语句等等的使用,当我们基本熟悉该语言基础之后,就要学会其优势方面的程序实践,比如 Golang 所具备的爬虫及其并发优势。我们将采用彩云词典的英文单词翻译成中文的在线词典爬虫程序,及其改进版本,在并发上,我们将采用 SOCKS5 代理服务器的方式体验 Golang 语言的高并发易用性
71 0
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
|
数据采集 机器学习/深度学习 传感器
爬虫搜索算法附matlab代码
爬虫搜索算法附matlab代码
|
数据采集 SQL 消息中间件
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
快速学习数据预处理-历史爬虫判断-实现代码及效果
118 0
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
|
数据采集 大数据 数据库
爬虫识别-指标碰撞-准备数据代码实现| 学习笔记
快速学习爬虫识别-指标碰撞-准备数据代码实现
147 0
爬虫识别-指标碰撞-准备数据代码实现| 学习笔记