BeautifulSoup / Python的NoneType错误

时间:2014-08-01 23:44:03

标签: python web-scraping beautifulsoup mechanize

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

我正在抓取一个非常大的HTML表格,并对其进行格式化以便将其输入到数据库中。一条记录有一个空白列,当我尝试

时会导致NoneType错误
print "|".join(record) 

因为记录看起来像

(data, ... , None, data)

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

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

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

2 个答案:

答案 0 :(得分:1)

尝试:

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

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

答案 1 :(得分: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是最快的。