我正在尝试编写一个程序,该程序从 .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()
它按预期打印所有内容,一个包含所有数据的大字符串。但是,当我实现实际的 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()
我写入 txt 文件以避免 Powershell 出现编码问题。无论如何,在我运行程序并打开 txt 文件后,它只显示了 links.txt 文件中最后一个链接的歌词。
作为参考,'links.txt' 应该包含几个到歌词维基歌曲页面的链接,如下所示:http://lyrics.wikia.com/Taylor_Swift: Shake_It_Off http://lyrics.wikia.com/Maroon_5:Animals
'web.txt' 应该是一个空白的输出文件。
为什么 pyquery 打破了 for 循环?当它做一些更简单的事情时,它显然可以工作,比如只是连接文件的各个行。