Python y sqlite3 lanzan un error: sqlite3.OperationalError: cerca de “s”: error de syntax

Estoy tratando de usar Python y BeautifulSoup para raspar algo de información web, iterar a través de ella y luego insertar algunas piezas en un DB sqlite3. Pero sigo teniendo este error:

Archivo “/Users/Chris/Desktop/BS4/TBTfile.py”, línea 103, en TBTscrape c.execute (item) sqlite3.OperationalError: cerca de “s”: error de syntax

Este mismo código funciona bien en un raspador muy similar y no produce estos errores. Aquí está la porción de esto:

listicle.append("INSERT INTO headlines (heds, url, image_loc, time, source) VALUES ('" + TBTheadline + "', '" + TBTurl + "', '" + imageName + "', '" + TBTpostDate + "', '" + source + "')") else: print "TBT item already in database" print listicle for item in listicle: c.execute(item) conn.commit() row = c.fetchall() print "This has been inserted succcessfully: ", item 

Usted está concatenando los datos recostackdos en sus declaraciones SQL. Nunca hagas eso, es la madre de todos los anti-patrones . Aparte de los problemas que está viendo (probablemente debido a un ‘o carácter similar en el código HTML raspado), tiene un agujero de seguridad en su código (puede o no ser importante en su caso).

De todos modos, sqlite3 tiene una buena manera de hacer exactamente lo que quiere: executemany . En tu caso

 listicle.append((TBTheadline,TBTurl,imageName,TBTpostDate,source)) conn.executemany("INSERT INTO headlines (heds, url, image_loc, time, source) VALUES (?,?,?,?,?)", listicle)