我正在尝试使用url列表遍历文本文件,并让我的python脚本解析文件中的每个url。
代码只处理文件中的LAST行,它应该处理每一行并将结果附加到文件中。
我不知道该怎么做,感谢你的帮助。 谢谢!
import feedparser # pip install feedparser
from BeautifulSoup import BeautifulStoneSoup
from BeautifulSoup import BeautifulSoup
import re
urls = open("c:/a2.txt", "r") # file with rss urls
for lines in urls:
d = feedparser.parse(lines) # feedparser is supposed to process every url in the file(urls)
statusupdate = d.entries[0].description
soup = BeautifulStoneSoup(statusupdate)
for e in d.entries:
print(e.title)
print(e.link)
print(soup.find("img")["src"])
print("\n") # 2 newlines
# writes title,link,image to a file and adds some characters
f = open(r'c:\a.txt', 'a')
f.writelines('"')
f.writelines(e.title)
f.writelines('"')
f.writelines(",")
f.writelines('"')
f.writelines(e.link)
f.writelines('"')
f.writelines(",")
f.writelines('"')
f.writelines(soup.find("img")["src"])
f.writelines('"')
f.writelines(",")
f.writelines("\n")
f.close()
答案 0 :(得分:1)
for lines in urls:
d = feedparser.parse(lines)
这个循环只是继续前进,它不断地将某些东西重新分配给变量d
。这意味着,当循环结束时,d
将具有与最后一行相关联的值。
如果您希望处理每一行,则需要对d
的每个值执行某些操作。例如,您可以将每个d.entries[0].description
放在一个列表中,然后迭代该列表来处理它。
urls = open("c:/a2.txt", "r") # file with rss urls
results = []
for lines in urls:
results.append(feedparser.parse(lines))
contents = []
for r in results:
statusupdate = r.entries[0].description
soup = BeautifulStoneSoup(statusupdate)
for e in r.entries:
contents.append((e.title, e.link, soup.find("img")["src"]))
with open(r'c:\a.txt', 'a') as f:
for c in contents:
f.writelines('"')
f.writelines(c[0])
f.writelines('"')
f.writelines(",")
f.writelines('"')
f.writelines(c[1])
f.writelines('"')
f.writelines(",")
f.writelines('"')
f.writelines(c[2])
f.writelines('"')
f.writelines(",")
f.writelines("\n")
答案 1 :(得分:0)
也许你不应该每次都将feedparser.parse()
返回的值分配给同一个变量?
至少在您当前的缩进中,它是循环内部发生的唯一事情。
statusupdate = d.entries[0].description
只运行一次,并在d
的最后一个值上运行,因为它在循环之外。
答案 2 :(得分:0)
您的计划中有几个问题
我的建议是将输出文件的open语句保留在循环之外,并且所有语句都应该以某种方式缩进,以便循环它的部分迭代输入文件。