Python:循环遍历文件中的url

时间:2012-04-07 16:17:33

标签: python loops rss feedparser

我正在尝试使用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()

3 个答案:

答案 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)

您的计划中有几个问题

  1. 您正在循环输入文件而不处理数据。处理只发生在最后一行。
  2. 您正在循环中打开输出文件(虽然在追加模式下)。
  3. 我的建议是将输出文件的open语句保留在循环之外,并且所有语句都应该以某种方式缩进,以便循环它的部分迭代输入文件。