Här har du lite kod som borde göra ungefär det du vill att den ska göra.
BeautifulSoup är helt kass nuförtiden sedan de bytte parser, så jag använde mig av lxml istället.
Har ingen aning om vad det där prowl vill ha för form av input, men det är bara att ändra sista raden i det här scriptet så att det passar.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3
import urllib2
import lxml.html
URL_TO_MONITOR = "http://www.blocket.se/stockholm?q=gant&cg=4080&w=1&st=s&cs=2&..."
PATH_TO_DATABASE = "database.sqlite"
# Download html
response_string = urllib2.urlopen(URL_TO_MONITOR).read()
# Turn html into something useful
doc = lxml.html.document_fromstring(response_string)
# Open connection to database
conn = sqlite3.connect(PATH_TO_DATABASE)
conn.row_factory = sqlite3.Row
cc = conn.cursor()
# Create the items table if it doesn't exist yet
cc.execute("CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY)")
conn.commit()
# Parse the html adding any not already added item to the 'items' list
items = []
raw_items = doc.find_class("item_row")
for r in raw_items:
item_id = r.attrib["id"][5:]
cc.execute("SELECT id FROM items WHERE id=(?)", [item_id])
stored_item = cc.fetchone()
if not stored_item:
cc.execute("INSERT INTO items(id) VALUES (?)", [item_id])
conn.commit()
desc = r.find_class("desc")[0]
name = r.find_class("item_link")[0].text_content().encode("utf-8")
link = r.find_class("item_link")[0].get("href")
price = r.find_class("list_price")[0].text_content()
items.append([name, price, link])
# Close the database connection
conn.close()
# Print the result
for item in items:
print("{},{},{}".format(item[0], item[1], item[2]))