请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答

2回答

bobby 2017-07-11 09:42:51

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

0 回复 有任何疑惑可以回复我~
冽凌风 2017-07-23 00:33:40

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

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 01:01:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信