1

我正在尝试遍历带有 url 列表的文本文件,并让我的 python 脚本解析文件中的每个 url。

该代码只处理文件中的最后一行,它应该处理每一行并将结果附加到文件中。

我不知道该怎么做,感谢您的帮助。谢谢!

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()
4

3 回答 3

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")
于 2012-04-07T16:23:50.663 回答
0

也许您不应该feedparser.parse()每次都将返回的值分配给同一个变量?

至少在您当前的缩进中,这是循环内唯一发生的事情。 statusupdate = d.entries[0].description只运行一次并对 的最后一个值进行操作d,因为它在循环之外。

于 2012-04-07T16:23:34.327 回答
0

您的程序中有几个问题

  1. 您正在循环输入文件而不处理数据。处理只发生在最后一行。
  2. 您正在循环打开输出文件(尽管处于附加模式)。

我的建议是将输出文件的 open 语句保留在循环之外,并且所有语句都应该缩进,以便它在循环中迭代输入文件的部分。

于 2012-04-07T16:27:34.717 回答