簡體   English   中英

Python:遍歷文件中的 url

[英]Python: looping through urls in file

我試圖遍歷一個帶有 url 列表的文本文件,並讓我的 python 腳本解析文件中的每個 url。

該代碼只處理文件中的最后一行,而它應該處理每一行並將結果寫入文件 append。

我不知道該怎么做,感謝您的幫助。 謝謝!

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

也許您不應該每次都將feedparser.parse()返回的值分配給同一個變量?

至少對於您當前的縮進,這是循環內唯一發生的事情。 statusupdate = d.entries[0].description只運行一次並對d的最后一個值進行操作,因為它在循環之外。

您的程序中有幾個問題

  1. 您正在循環輸入文件而不處理數據。 處理只發生在最后一行。
  2. 您正在循環打開 output 文件(盡管在 append 模式下)。

我的建議是將 output 文件的 open 語句保留在循環之外,並且您的所有語句都應該以某種方式縮進,以便它的循環部分迭代輸入文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM