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。たとえば、everyd.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

プログラムにはいくつかの問題があります

  1. データを処理せずに入力ファイルをループしています。処理は最後の行でのみ行われます。
  2. 出力ファイルを(追加モードではありますが)ループで開いています。

私の提案は、出力ファイルのopenステートメントをループの外側に保持することです。すべてのステートメントは、入力ファイルを反復するループの部分になるようにインデントする必要があります。

于 2012-04-07T16:27:34.717 に答える
0

によって返される値feedparser.parse()を毎回同じ変数に代入するべきではないでしょうか?

少なくとも現在のインデントでは、ループ内で発生するのはこれだけです。 はループの外側にあるためstatusupdate = d.entries[0].description、一度だけ実行され、 の最後の値で動作します。d

于 2012-04-07T16:23:34.327 に答える