2016-06-24 6 views
1

Ich würde gerne um Hilfe mit einem RSS-Programm bitten. Ich sammle Websites, die relevante Informationen für mein Projekt enthalten, und überprüfe, ob sie RSS-Feeds enthalten. Die Links werden in einer TXT-Datei gespeichert (ein Link in jeder Zeile). Also habe ich eine TXT-Datei mit voller Basis-URLs, die für RSS überprüft werden müssen.Öffne Links von TXT-Datei in Python

Ich habe diesen Code gefunden, der meine Arbeit viel einfacher machen würde.

import requests 
from bs4 import BeautifulSoup 

def get_rss_feed(website_url): 
    if website_url is None: 
     print("URL should not be null") 
    else: 
     source_code = requests.get(website_url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text) 
     for link in soup.find_all("link", {"type" : "application/rss+xml"}): 
      href = link.get('href') 
      print("RSS feed for " + website_url + "is -->" + str(href)) 

get_rss_feed("http://www.extremetech.com/") 

Aber ich mag meinen gesammelten URLs aus der txt-Datei öffnen, anstatt jeweils einzeln eingeben.

So habe ich tryed das Programm mit diesem erweitern:

from bs4 import BeautifulSoup, SoupStrainer 

with open('test.txt','r') as f: 
    for link in BeautifulSoup(f.read(), parse_only=SoupStrainer('a')): 
     if link.has_attr('http'): 
      print(link['http']) 

Aber dies mit einem Fehler zurückgibt, sagen, dass beautifoulsoup kein http-Client ist.

Ich habe auch mit dieser erweitert:

def open() 
    f = open("file.txt") 
    lines = f.readlines() 
    return lines 

Aber das gab mir eine Liste mit „“ getrennt

Ich würde wirklich dankbar, wenn mir jemand helfen

Antwort

0

der Lage wäre, Ich denke, Sie können es mit Hilfe von urllib

import urllib 
    f = open('test.txt','r') 
    #considering each url in a new line... 
    while True: 
    URL = f.readline() 
    if not URL: 
     break 
    mycontent=urllib.urlopen(URL).read() 
+0

danke für schnelle hilfe! Und wo soll ich den Speicherort der TXT-Datei definieren? – Platy

+0

Wenn Sie Probleme bei der iterate durch Textdatei haben, chek dies: [http://stackoverflow.com/a/5733487/6495164] – danielarend

1

In der Regel tun Sie etwas wie t sein:

with open('links.txt', 'r') as f: 
    for line in f: 
     get_rss_feed(line) 

Außerdem ist es eine schlechte Idee, eine Funktion mit dem Namen open, wenn Sie die eingebaute Funktion open zu ersetzen beabsichtigen, zu definieren.

+0

Vielen Dank, ich versuche es. danke für den rat mit offen, ich habe es verpasst – Platy

+0

Ich habe Ihren vorgeschlagenen Code in das Programm eingefügt. Jetzt kehrt es ohne Fehlermeldung, aber auch ohne Ergebnisse zurück. root @ loko: ~ # sudo python /root/Desktop/rsskeres.py root @ loko: ~ # sudo python /root/Desktop/rsskeres.py wenn ich Zeilen aus dem Code auszudrucken erhalte ich die URL root @ loko: ~ # sudo python /root/Desktop/nyit3.py http://www.theguardian.com/ und das ist die Rückkehr, was das ursprüngliche Programm gibt: root @ loko: ~ # sudo python /root/Desktop/rskeses.py RSS-Feed für http://www.theguardian.com/is -> \t http://www.theguardian.com/international/rss Was könnte das Problem sein? – Platy

+0

Ich stelle mir vor, Sie würden 'line.rstrip()' wollen –

Verwandte Themen