请问老师,用itemloader add_css的时候,这段css偶尔取不到值怎么处理?

来源:6-15 item loder方式提取question - 2

天真男

2017-07-10

不是每个网页都存在,比如有些网页没有tags,我还用tags的class去统一取得时候,就会出现一个空列表[],之后再itemloader.load_item()的时候就会报错。class 'KeyError'。怎么办?我试图在input_processor中,给一个自定义的方法,如果value为空,就给它一个"",还是会报错。这种情况在爬取网页中很频繁,因为有些网页就是缺少一些字段,而大部分网页又存在,能否通过一个middleware还是其他什么扩展的方法统一处理呢??请老师给一些代码参考。谢谢

写回答

2回答

bobby

2017-07-11

你是因为在什么地方取值 直接取比如 item["value"]了吧 你可以在这个地方取值之前先加一个判断 if “value”in item

0
0

冽凌风

2017-07-23

同学你解决了吗?我也遇到相同问题了,老师的回答不是很懂。能贴个参考代码吗?

0
1
天真男
老师讲的很明白啊,如果css取不到值的时候,在pipeline入库时不能取self["字段名"],因为取不到css,item中不会包含这个字段的,所以要在入库前先判断 比如你的css有时候取不到tags这个字段,你直接用self["tags"]作为值写入sql就会在爬到取不到tags的网页报错。所以入库前先判断tags是否在self中 tags = "" if "tags" in self: tags = self["tags"] 然后插入数据库拼sql的时候用这个tags变量,别用self["tags"]
2017-07-23
共1条回复

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5795 学习 · 6290 问题

查看课程