2012-04-07 3 views
1

URL 목록으로 텍스트 파일을 반복하고 파이썬 스크립트에서 파일의 각 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() 

답변

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") 
+0

당신이 의미하는 바를 이해하지만 여전히 이것을 구현하는 방법을 모르겠습니다. (내 첫 번째 파이썬 스크립트) –

+0

어떻게해야하는지 알려주는 코드를 추가했습니다. 테스트되지 않았지만 중간 결과를 나중에 처리 할 수 ​​있도록 목록에 넣습니다. –

+0

Wohoo, 작동했습니다 :) 감사합니다. –

0

어쩌면 feedparser.parse()에 의해 반환 된 값을 매번 같은 변수에 할당해서는 안됩니까?

적어도 현재 들여 쓰기로 루프 내에서 발생하는 유일한 것입니다. statusupdate = d.entries[0].description은 루프 외부에 있기 때문에 한 번만 실행되고 마지막 값인 d에서 작동합니다.

+0

아마, 난 파일의 URL에 대한 자리 표시 자 및 파일의 모든 줄에 대한 스크립트를 실행할 feedparser.parse() 싶습니다 –

+0

그러나 루프 외부에 있기 때문에 코드가 모든 줄에 대해 실행되고 있지 않습니다. . 선의 루프에서 피드를 구문 분석하고 결과를 'd'로 지정하여 이전 결과를 덮어 씁니다. 작업이 끝나면'd'의 마지막 값을 처리합니다. 처리 부분을 루프 안에 넣어 여러 번 실행하십시오. –

0

은 프로그램

  1. 당신은 데이터를 처리하지 않고 입력 파일을 루핑에 문제의 몇 가지가 있습니다. 처리는 마지막 행에서만 발생합니다.
  2. 루프가있는 출력 파일을 추가 모드로 열었습니다.

나의 제안은 루프 외부 출력 파일을 오픈 문을 유지하는 것, 그리고 모든 문은 방법으로 들여 쓰기되어야하는 입력 파일을 반복 처리 루프의 그 부분을되도록.

+0

여러 가지 방법으로 들여 쓰려고했으나 여전히 작동하지 않습니다. 처음으로 파이썬 스크립트를 작성한 이후로 열심히 찾습니다. –