0

(免责声明:对 Python 和编程来说还是新手)

我使用 Python 2.7 和 Beautiful Soup 来实现从网站中提取数据的函数……</p>

date = soup.find('div', class_="attention-box").p.string

... 运行正则表达式,因为我只需要年份,而不是Date:而不是日 + 月 ...</p>

date = re.findall(r'(\d{4})\s+', date)

… 将其添加到字典中…</p>

collection['date']=date

......并返回字典。

当我尝试使用字典中的字符串打印以下内容(我正在为 wiki 创建模板)时

print "|" + collection['URL'] + "|" + collection['title'] + "|" + collection['name']+"|" 

有效。

当我添加日期

print "|" + collection['URL'] + "|" + collection['title'] + "|" + collection['name']+"|" + collection['date'] + "|" 

我收到以下错误:TypeError: coercing to Unicode: need string or buffer, list found

在我的函数中,我添加date = str(date)并得到了一个工作输出,我在日期部分得到了例如[u'2001']。如何在此特定设置中的此视觉 unicode 表示(?)中删除它?

非常感谢。

4

2 回答 2

1

列表样式

首先是风格的东西:你可以代表这个:

print "|" + collection['URL'] + "|" + collection['title'] + "|" + collection['name']+"|" + collection['date'] + "|" 

像这样:

print "|".join([a[x] for x in ('URL', 'title', 'name', 'date')])

演示:

In : a
Out: {'URL': 'example.com', 'date': '2013-03-13', 'name': 'Mel', 'title': 'Foo!'}

In : [a[x] for x in ('URL', 'title', 'name', 'date')]
Out: ['example.com', 'Foo!', 'Mel', '2013-03-13']

In : "|".join([a[x] for x in ('URL', 'title', 'name', 'date')])
Out: 'example.com|Foo!|Mel|2013-03-13'

重新使用

第二点是re.findall返回所有匹配的数组。您可能希望将匹配设置为使用re.search(...)检索result.group(),或者re.finditer如果您想在找到多个匹配时进行错误检查,请使用。您也可以获取 的第一个值re.findall,但考虑到其他两个选项,这似乎效率低下。

于 2013-03-13T20:59:14.397 回答
1

findall正在返回一个集合(一个 python 列表)。

如果只有一个date匹配的正则表达式使用find,或者您可以继续使用findall和访问第一个日期使用date[0]

于 2013-03-13T20:37:45.133 回答