0

(免責事項:Pythonとプログラミングはまだ新しいです)

ウェブサイトからデータを抽出する関数にPython2.7とBeautifulSoupを使用しました…</p>

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

…正規表現を実行します。日付ではなく年だけが必要なので、日と月ではなく…</ 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:Unicodeへの強制:文字列またはバッファが必要、リストが見つかりました

私の関数では、機能date = str(date)する出力を追加して取得しました、日付セクションに[ u'2001 ']などが表示されます。この特定の設定で、この視覚的なUnicode表現(?)でこれを削除するにはどうすればよいですか?

どうもありがとうございます。

4

2 に答える 2

1

findallコレクション(Pythonリスト)を返しています。

date正規表現が使用する一致が1つしかない場合、またはを使用して最初の日付をfind引き続き使用してアクセスできる場合findalldate[0]

于 2013-03-13T20:37:45.133 に答える
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の使用

2番目のポイントはre.findall、すべての一致の配列を返すことです。re.search(...)で取得するものを使用するように一致を設定するか、複数の一致が見つかった場合にエラーチェックを行う場合にresult.group()使用することをお勧めします。re.finditerの最初の値を取得することもできますがre.findall、他の2つのオプションを考えると非効率的です。

于 2013-03-13T20:59:14.397 に答える