1

.txt ファイルの各行から URL を取得し、PyQuery を実行して LyricsWiki から歌詞データを取得するプログラムを作成しようとしていますが、実際に PyQuery のものを入れるまではすべて正常に動作しているようです。そうです:

full_lyrics = ""        
#open up the input file
links = open('links.txt')

for line in links:
    full_lyrics += line

print(full_lyrics)
links.close()

期待どおりにすべてが出力され、すべてのデータが含まれる 1 つの大きな文字列が出力されます。ただし、実際の html 解析を実装すると、最後の URL からのみ歌詞が取得され、それ以前のすべての歌詞がスキップされます。

import requests, re, sqlite3
from pyquery import PyQuery
from collections import Counter

full_lyrics = ""        
#open up the input file
links = open('links.txt')
output = open('web.txt', 'w')
output.truncate()

for line in links:
    r = requests.get(line)
    #create the PyQuery object and parse text
    results = PyQuery(r.text)
    results = results('div.lyricbox').remove('script').text()
    full_lyrics += (results + " ")

output.write(full_lyrics)
links.close()
output.close()

Powershell でのエンコードの問題を回避するために、txt ファイルに書き込みます。とにかく、プログラムを実行して txt ファイルを開くと、links.txt ドキュメントの最後のリンクの歌詞しか表示されません。

参考までに、「links.txt」には、次のように、歌詞ウィキの曲ページへのリンクがいくつか含まれている必要があり ます

「web.txt」は空白の出力ファイルである必要があります。

pyquery が for ループを壊すのはなぜですか? ファイルの個々の行を連結するなど、より単純なことを行う場合は明らかに機能します。

4

1 に答える 1

1

問題は、ファイル (links.txt) から読み取るすべての行に改行文字が追加されていることです。links.txt の別の行を開いてみると、最後のエントリでさえ処理されないことがわかります。

次のように、 for の後の行変数で右のストリップを行うことをお勧めします。

for line in links:
    line = line.rstrip()
    r = requests.get(line)
    ...

それはうまくいくはずです。

また、html を取得するためのリクエストは必要ないと思います。試してみてresults = PyQuery(line)、それが機能するかどうかを確認してください。

于 2014-12-22T18:13:15.787 に答える