Python (newbie) Parsen von XML-API-Aufruf
Hab ich nach einigen tutorials/andere Fragen auf stack/Dokumentation und kann immer noch nicht herausfinden. pfui!!!
Machen die API-Anforderung, und die Analyse aus (will Variablen zuweisen, aber das ist ein bonus zu dieser Frage), Das ist, was ich versuche. Warum kann ich keine Liste der Titel und link der items?
#!/usr/bin/python
# Screen Scraper for Subs
import urllib
from xml.etree import ElementTree as ET
show = 'heroes'
season = '4'
language = 'en'
limit = '1'
requestURL = 'http://api.allsubs.org/index.php?' \
+ 'search=' + show \
+ '+season+' + season \
+ '&language=' + language \
+ '&limit=' + limit
root = ET.parse(urllib.urlopen(requestURL)).getroot()
print root
print '\n'
items = root.findall('items')
for item in items:
item.find('title').text # should print: <![CDATA[Heroes Season 4 Subtitles]]>
item.find('link').text # Should print: http://www.allsubs.org/subs-download/heroes+season+4/1223435/
XML-Antwort
<AllSubsAPI>
<title>AllSubs API: Subtitles Search</title>
<link>http://www.allsubs.org</link>
<description><![CDATA[Subtitles Search for Heroes Season 4]]></description>
<language>en-us</language>
<results>1</results>
<found_results>24</found_results>
<items>
<item>
<title><![CDATA[Heroes Season 4 Subtitles]]></title>
<link>http://www.allsubs.org/subs-download/heroes+season+4/1223435/</link>
<filename>heroes-season-4-english-heroes-season-4-en.zip</filename>
<files_in_archive>Heroes - 4x01-02 - Orientation.HDTV.FQM.en.srt|Heroes - 4x17 - The Art of Deception.HDTV.2HD.en.srt|Heroes - 4x07 - Strange Attractors.HDTV.LOL.en.srt|Heroes - 4x08 - Once Upon a Time in Texas.HDTV.2HD.en.srt|Heroes - 4x07 - Strange Attractors.720p HDTV.DIMENSION.en.srt|Heroes - 4x05 - Hysterical Blindness.720p HDTV.X264.en.srt|Heroes - 4x09 - Shadowboxing.HDTV.LOL.en.srt|Heroes - 4x16 - Pass Fail.HDTV.LOL.en.srt|Heroes - 4x04 - Acceptance.HDTV.en.srt|Heroes - 4x01-02 - Orientation.720p HDTV.DIMENSION.en.srt|Heroes - 4x06 - Tabula Rasa.HDTV.NoTV.en.srt|Heroes - 4x10 - Brother's Keeper.HDTV.FQM.en.srt|Heroes - 4x04 - Acceptance.HDTV.FQM.en.srt|Heroes - 4x14 - Let It Bleed.720p HDTV.DIMENSION.en.srt|Heroes - 4x06 - Tabula Rasa.720p HDTV.SiTV.en.srt|Heroes - 4x08 - Once Upon a Time in Texas.HDTV.NoTV.en.srt|Heroes - 4x12 - The Fifth Stage.HDTV.LOL.en.srt|Heroes - 4x19 - Brave New World.HDTV.LOL.en.srt|Heroes - 4x15 - Close to You.720p HDTV.DIMENSION.en.srt|Heroes - 4x03 - Ink.720p HDTV.DIMENSION.en.srt|Heroes - 4x11 - Thanksgiving.720p HDTV.DIMENSION.en.srt|Heroes - 4x13 - Upon This Rock.720p HDTV.DIMENSION.en.srt|Heroes - 4x13 - Upon This Rock.HDTV.LOL.en.srt|Heroes - 4x14 - Let It Bleed.HDTV.LOL.en.srt|Heroes - 4x15 - Close to You.HDTV.LOL.en.srt|Heroes - 4x12 - The Fifth Stage.720p HDTV.DIMENSION.en.srt|Heroes - 4x18 - The Wall.HDTV.LOL.en.srt|Heroes - 4x08 - Once Upon a Time in Texas.720p HDTV.CTU.en.srt|Heroes - 4x17 - The Art of Deception.HDTV.CTU.en.srt|Heroes - 4x09 - Shadowboxing.720p HDTV.DIMENSION.en.srt|Heroes - 4x10 - Brother's Keeper.720p HDTV.DIMENSION.en.srt|Heroes - 4x04 - Acceptance.720p HDTV.CTU.en.srt|Heroes - 4x11 - Thanksgiving.HDTV.FQM.en.srt|Heroes - 4x03 - Ink.HDTV.FQM.en.srt|Heroes - 4x05 - Hysterical Blindness.HDTV.XII.en.srt|</files_in_archive>
<languages>en</languages>
<added_on>2010-02-16</added_on>
</item>
</items>
</AllSubsAPI>
UPDATE:
Funktionierte, vielen Dank für die Hilfe und darauf, meine Tippfehler
items = root.findall('items/item')
for item in items:
print item.find('title').text
print item.find('link').text
api.allsubs.org/... ist die requestURL, und bekomme ich <items - >keine Ergebnisse</items> - ich glaube, du bist nicht immer so Recht...
ah, show = 'Helden' E nicht 'Helden'! Versuchen Sie, die!
ah, show = 'Helden' E nicht 'Helden'! Versuchen Sie, die!
InformationsquelleAutor Phill Pafford | 2010-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
sollte
InformationsquelleAutor Adam Vandenberg
Dies funktioniert für mich. Hinweis: ich bin mit urllib2, um durch einen proxy:
beachten Sie, dass findall('items') findet die "Elemente" - tag, was Sie wollen, um eine Schleife über (glaube ich) sind die "item" - tags, also sind wir findall (). Außerdem müssen Sie auf drucken, um alles aus python.
Auch, wenn ich es Tue, mit limit=2, erhalte ich ein:
Ich bin nicht sicher, dass die XML zurück kommen von dieser API ist gut-gebildet - es gibt keine "xml" element am Anfang, für den Anfang. Ich würde nicht Vertrauen...
so urllib2 ist für proxies?
es ist eines der guten Dinge, die es tut - es respektiert http_proxy environment-Einstellungen und proxies hindurch.
InformationsquelleAutor Spacedman
Sind Sie nicht der Iteration über die "item" - Elementen, Sie sind in der Tat der Iteration über die 'Sachen' - Elemente.
Ich denke, es sollte sein:
InformationsquelleAutor Mikeyg36