2016-11-09 6 views
0

Im Parsing einer Website einfügen und in MySQL einfügen möchten. Es gibt 6 Feld muss jede URL unter bestimmten Feld analysieren. Wer weiß, wie ich pymysql verwenden kann, um eine MySQL-Tabelle in ein Wörterbuchobjekte in Python zu verwandeln?Verwenden Sie pymysql, um Tabelle

from bs4 import BeautifulSoup 
import requests 
import urllib.request 
import pymysql 

con = pymysql.connect(host = 'localhost',user = 'root',passwd = 'root',db = 'm_db') 
cursor = con.cursor(pymysql.cursors.DictCursor) 

with open(r"C:\New folder\urllist.txt") as f: 
    urls = [u.strip('\n') for u in f.readlines()] 
    page = 0 
    while page < 5: 
     try: 
      soup = BeautifulSoup(requests.get(urls[page]).content, "html.parser") 
      text = soup.select("head script[type=text/javascript]")[-1].text 
      start = text.find('dataLayer = [') + len('dataLayer = [') 
      end = text.rfind('];') 
      rows = text[start:end].strip().split('\n') 
     except: 
      pass 
     for d in rows: 
      cursor.execute("INSERT INTO micro (d['brand'], d['productPrice'], d['SKU'], d['productID'], d['mpn'], d['ean'],) VALUES (%s,%s,%s,%s,%s,%s)",(d['brand'], d['productPrice'], d['SKU'], d['productID'], d['mpn'], d['ean'])) 
      d = cursor.fetchall() 
     con.commit() 
     page = page + 1 

Wie kann ich bevölkern eine SQL-INSERT-Anweisung mit dem Daten ich habe. ist hier die Daten i

{ 
    'brand':'Fluke', 
    'productPrice':'2199.99', 
    'SKU':'34353362', 
    'productID':'443329', 
    'mpn':'RT-AC3200', 
    'ean':'886290480914', 
} 

haben Sie diesen Fehler

Traceback (most recent call last): File "C:/PycharmProjects/untitled4/m_new.py", line 22, 
in <module> cursor.execute("INSERT INTO micro (d['brand'], d['productPrice'], d['SKU'], d['productID'], d['mpn'], d['ean'],) VALUES (%s,%s,%s,%s,%s,%s)",(d['brand'], d['productPrice'], d['SKU'], d['productID'], d['mpn'], d['ean'])) 
TypeError: string indices must be integers 
+0

Wenn Sie diesen Code ausführen, was passiert? was genau suchst du? – r0xette

+0

@ r0xette hier ist das, was Traceback (jüngste Aufforderung zuletzt) ​​erhalten: Datei "C: /PycharmProjects/untitled4/m_new.py", Zeile 22, in cursor.execute ("IN micro (d [ 'Marke INSERT '], d [' productPrice '], d [' SKU '], d [' productID '], d [' mpn '], d [' ean '],) WERTE (% s,% s,% s, % s,% s,% s) ", (d ['Marke'], d ['Produktpreis'], d ['Artikelnummer'], d ['ProduktID'], d ['mpn'], d [' ean '])) TypeError: String-Indizes müssen ganze Zahlen sein – Burak

+0

Sie lesen keine Daten von MySQL, so dass Ihre Frage "Wie kann ich pymysql verwenden, um eine MySQL-Tabelle in ein Wörterbuch Objekte zu verwandeln" – e4c5

Antwort

0

Ihre SQL-Abfrage nicht korrekt erzeugt ist. Es sollte

sein
cursor.execute("INSERT INTO micro (brand, productPrice, SKU, productID, mpn, ean) VALUES (%s,%s,%s,%s,%s,%s)",(d['brand'], d['productPrice'], d['SKU'], d['productID'],d['mpn'], d['ean'])) 
+0

Immer noch gleicher Fehler, TypeError: String-Indizes müssen Ganzzahlen sein. – Burak

Verwandte Themen