16

ロシア最大の歌詞サイトhttp://amalgama-lab.comから歌詞を解析し、Vkontakte アカウントのオーディオ リストに歌詞 (翻訳済みおよびオリジナル) を保存しようとしました (残念ながら、amalgama には API がありません)。

import urllib
from BeautifulSoup import BeautifulSoup
import vkontakte
vk = vkontakte.API(token=<SECRET_TOKEN>)
audios = vk.getAudios(count='2')
#{u'artist': u'The Beatles', u'url': u'http://cs4519.vkontakte.ru/u4665445/audio/4241af71a888.mp3', u'title': u'Yesterday', u'lyrics_id': u'2365986', u'duration': 130, u'aid': 166194990, u'owner_id': 173505924}
url = 'http://amalgama.mobi/songs/'
for i in audios:
    print i['artist']
    if i['artist'].startswith('The '):
        url += i['artist'][4:5] + '/' + i['artist'][4:].replace(' ', '_') + '/'     +i['title'].replace(' ', '_') + '.html'
    else:
        url += i['artist'][:1] + '/' + i['artist'].replace(' ', '_') + '/' +i['title'].replace(' ', '_') + '.html'
    url = url.lower()
    page = urllib.urlopen(url)
    soup = BeautifulSoup(page.read(), fromEncoding="utf-8")
    texts = soup.findAll('ol', )
    if len(texts) != 0:
        en = texts[0].text #this!
        ru = texts[1].text #this!
        vk.get('audio.edit', aid=i['aid'], oid = i['owner_id'], artist=i['artist'], title = i['title'], text = ru, no_search = 0)

しかし、 .text メソッドは区切り文字なしで文字列を返します:

「昨日、私のすべての悩みは遠く離れているように見えた今、それらはここにとどまるように見えますああ、私は昨日を信じています突然、私は以前の半分の男ではありません私にぶら下がっている影がありますああ、昨日は突然来ました[コーラス:]なぜ彼女が行かなければならなかったのか わからない 彼女は言わなかった 私が何か間違ったことを言った 今、私は昨日が恋しい 昨日、愛はとても簡単なゲームだった 今、私は隠れる場所が必要です ああ、私は信じています」

主な問題です。次に、このように歌詞を保存するためのより良い方法は次のとおりです。

歌詞ライン 1 (オリジナル)

歌詞 1 行目 (翻訳済み)

歌詞ライン 2 (オリジナル)

歌詞 2 行目 (翻訳済み)

歌詞3行目(オリジナル)

歌詞 3 行目 (翻訳済み)

...

? 厄介なコードしか得られません。ありがとう

4

3 に答える 3

7

BeautifulSoup4にある.stringsジェネレーターを調べることをお勧めします 。

于 2012-08-26T03:18:56.677 に答える
0

あなたはこれを行うことができます:

soup = BeautifulSoup(html)
ols = soup.findAll('ol') # for the two languages

for ol in ols: 
    ps = ol.findAll('p')
    for p in ps:
        for item in p.contents:
            if str(item)!='<br />':
                print str(item)
于 2012-08-25T18:19:26.493 に答える