Problem

You need to extract and parse all the headers and links from a web site or an XML feed, and then dump the data into a CSV file.

Check out the accompanying video!

Solution

import csv from urllib import urlopen import re 

Perform html/xml query, grab desired fields, create a range:

xml = urlopen("http://www.tableausoftware.com/public/feed.rss").read() xmlTitle = re.compile("<title>(.*)</title>") xmlLink = re.compile("<link>(.*)</link>") findTitle = re.findall(xmlTitle,xml) findLink = re.findall(xmlLink,xml) iterate = [] iterate[:] = range(1, 25) 

Open CSV file:

writer = csv.writer(open("pytest.csv", "wb")) 

Write header to CSV file (you want to do this before you enter the loop):

head = ("Title", "URL") writer.writerow(head) 

Write the For loop to iterate through the XML file and write the rows to the CSV file:

for i in iterate: writer.writerow([findTitle[i], findLink[i]]) 

Script

#!/usr/bin/env python import csv from urllib import urlopen import re # Open and read HTMl / XML xml = urlopen("http://www.tableausoftware.com/public/feed.rss").read() # Grab article titles and links using regex xmlTitle = re.compile("<title>(.*)</title>") xmlLink = re.compile("<link>(.*)</link>") # Find and store the data findTitle = re.findall(xmlTitle,xml) findLink = re.findall(xmlLink,xml) #Iterate through the articles to create a range iterate = [] iterate[:] = range(1, 25) # Open the CSV file, write the headers writer = csv.writer(open("pytest.csv", "wb")) head = ("Title", "URL") writer.writerow(head) # Using a For Loop, write the results to the CSV file, row by row for i in iterate: writer.writerow([findTitle[i], findLink[i]])