<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pzwiki.wdka.nl/mw-mediadesign/index.php?action=history&amp;feed=atom&amp;title=Syllabus_20100126</id>
	<title>Syllabus 20100126 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pzwiki.wdka.nl/mw-mediadesign/index.php?action=history&amp;feed=atom&amp;title=Syllabus_20100126"/>
	<link rel="alternate" type="text/html" href="https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=Syllabus_20100126&amp;action=history"/>
	<updated>2026-08-04T15:48:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=Syllabus_20100126&amp;diff=3833&amp;oldid=prev</id>
		<title>Migratebot: Created page with &quot;Last week when processing RSS feeds we ran into some issues translating stuff into perfect XML that would be accepted as an ePub. Turns out there are quite a few tools to help do...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=Syllabus_20100126&amp;diff=3833&amp;oldid=prev"/>
		<updated>2010-09-23T19:33:00Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Last week when processing RSS feeds we ran into some issues translating stuff into perfect XML that would be accepted as an ePub. Turns out there are quite a few tools to help do...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Last week when processing RSS feeds we ran into some issues translating stuff into perfect XML that would be accepted as an ePub. Turns out there are quite a few tools to help do this work in Python. More interestingly, these same tools are designed to help &amp;quot;scape&amp;quot; pages from the wild (ie that maybe haven't been designed to be read as a feed or via a special [[API]]).&lt;br /&gt;
&lt;br /&gt;
== XML Parsing in Python ==&lt;br /&gt;
&lt;br /&gt;
There are some (potentially) useful modules built-in to Python to work with XML.&lt;br /&gt;
&lt;br /&gt;
Example using [http://www.python.org/doc/2.5.2/lib/expat-example.html built-in expat] module.&lt;br /&gt;
&lt;br /&gt;
Example using [http://www.python.org/doc/2.5.2/lib/module-xml.dom.minidom.html the minidom] parser.&lt;br /&gt;
&lt;br /&gt;
To deal with potentially messy &amp;quot;real-world&amp;quot; cases, however, it usually makes sense to use extra libraries designed to be more tolerant and capable of correcting small mistakes in structure.&lt;br /&gt;
* html5lib&lt;br /&gt;
* [[BeautifulSoup | BeautifulSoup]]&lt;br /&gt;
* An example of [[WebSpiders | spidering]] a webpage to find and download images.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== This week's code: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import feedparser&lt;br /&gt;
import urllib2, urlparse, os, sys&lt;br /&gt;
import html5lib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def openURL (url):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    returns (page, actualurl)&lt;br /&gt;
    sets user_agent and resolves possible redirection&lt;br /&gt;
    realurl maybe different than url in the case of a redirect&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;    &lt;br /&gt;
    request = urllib2.Request(url)&lt;br /&gt;
    user_agent = &amp;quot;Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.1.5) Gecko/20091109 Ubuntu/9.10 (karmic) Firefox/3.5.5&amp;quot;&lt;br /&gt;
    request.add_header(&amp;quot;User-Agent&amp;quot;, user_agent)&lt;br /&gt;
    pagefile=urllib2.urlopen(request)&lt;br /&gt;
    realurl = pagefile.geturl()&lt;br /&gt;
    return (pagefile, realurl)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(f,url)= openURL (&amp;quot;http://www.nrcnext.nl/blog/2010/01/26/verdubbeling-aantal-verkochte-iphones/&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
parser = html5lib.HTMLParser(tree=html5lib.treebuilders.getTreeBuilder(&amp;quot;dom&amp;quot;))&lt;br /&gt;
tree = parser.parse(f)&lt;br /&gt;
f.close()&lt;br /&gt;
tree.normalize()&lt;br /&gt;
for node in tree.getElementsByTagName(&amp;quot;img&amp;quot;):&lt;br /&gt;
    src = node.getAttribute(&amp;quot;src&amp;quot;)&lt;br /&gt;
    print src&lt;br /&gt;
&lt;br /&gt;
sys.exit()&lt;br /&gt;
&lt;br /&gt;
newwork = feedparser.parse(&amp;quot;http://feeds.nrcnext.nl/nrcnext-blog&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#import pprint&lt;br /&gt;
#pprint.pprint(newwork.entries[0])&lt;br /&gt;
#import sys&lt;br /&gt;
#sys.exit()&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;feedbook&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link type=&amp;quot;text/css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; media=&amp;quot;all&amp;quot; href=&amp;quot;stylesheet.css&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for e in newwork.entries:&lt;br /&gt;
    print e[&amp;quot;title&amp;quot;].replace(&amp;quot;&amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;&amp;quot;).encode(&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
    print e[&amp;quot;link&amp;quot;]&lt;br /&gt;
print&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Migratebot</name></author>
	</entry>
</feed>