【问题标题】:NoneType error with BeautifulSoup/PythonBeautifulSoup/Python 的 NoneType 错误
【发布时间】:2014-08-01 23:44:02
【问题描述】:

我看到了许多类似的帖子,但似乎没有一个适用于我的问题。对不起,如果我错过了。

我正在抓取一个相当大的 HTML 表格,并对其进行格式化,以便将其输入数据库。一条记录有一个空白列,当我尝试时会导致 NoneType 错误

print "|".join(record) 

因为记录看起来像

(data, ... , None, data)

在创建记录元组之前,我尝试通过应用以下内容来过滤掉 None:

def null_converter(field):
    return field.string if field else "NULL"

但这似乎不起作用。有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: python web-scraping beautifulsoup mechanize


    【解决方案1】:

    删除无值:

    record = ("data", None, "data")
    [x for x in record if x is not None]
    ['data', 'data']
    

    如果您确定没有虚假值:

    print filter(None,record)
    ('data', 'data')
    

    或者:

      "|".join(map(str,records))
     In [6]: "|".join(map(str,d))
     Out[6]: 'data|None|data'
    

    一些时间安排:

    In [9]: d = ("data", None, "data") * 100
    
    In [10]: %timeit [x if x is not None else "Null" for x in d ]
    10000 loops, best of 3: 22.8 µs per loop
    
    In [11]: %timeit "|".join(map(str,d))
    10000 loops, best of 3: 38.9 µs per loop
    
    In [12]: %timeit "|".join((str(field) for field in d))
    10000 loops, best of 3: 66.3 µs per loop
    

    map 比循环和强制转换更有效,但list comp 是最快的。

    【讨论】:

    • 嗯,我只需要过滤。我仍然需要某种占位符以便于加载,所以我使用了record = ["NULL" if field is None else field for field in record] 不是最有效的,但它有效吗?谢谢!
    • 不客气。我不确定您是否想保留一些空值占位符,但是列表 comp 是最简单的方法。
    • 我真的不明白为什么 null_checking 函数不起作用。该字段被解析,通过空检查器发送,并存储为记录。现在,我正在解析字段,存储为记录,然后对整个记录进行空值检查(而不是在我第一次解析时),这样效率较低。
    • 我在看那个,如果你想把你的代码发布到 pastebin 我相信我能明白为什么它不起作用,你确实有调用另一个函数并检查每个元素的开销,所以它看看会有什么性能差异实际上会很有趣。
    • 这是代码的一个版本(URL 本身是私有的,但它只是一个大型 HTML 表)pastie.org/private/nnff5mshedzujftyrmlfzg。本来我并没有多余的函数,只是在parse函数中做空检查,但是看起来很杂乱。谢谢!
    【解决方案2】:

    试试:

    print "|".join((str(field) for field in record))
    

    如果这不起作用,record 本身是否可能是 None(而不是列表/元组)?

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 2018-11-12
      • 2021-03-10
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多