2016-10-22 100 views
0

解析一個網站並想寫入MySQL。有11個字段需要在特定字段下解析每個網址。將JSON文件映射到MySQL

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

con = pymysql.connect(host = 'localhost',user = 'root',passwd = 'root',db = 'micro') 

with open(r"C:\Users\New folder\url_list.txt") as f: 

urls = [u.strip('\n') for u in f.readlines()] 
page = 0 

while page < 1000: 
    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: 
     print(d) 
    page = page + 1 
    print(page) 

這裏是我的JSON文件

[{ 
    'page':'ProductPage', 
     'OAM':'False', 
     'storeNum':'029', 
     'brand':'ASUS', 
     'productPrice':'199.99', 
    'SKU':'576181', 
    'productID':'443759', 
    'mpn':'RT-AC3200', 
    'ean':'886227780914', 
     'category':'Wireless Routers', 
    'isMobile':'False' 
}] 
[{ 
    'page':'ProductPage', 
     'OAM':'False', 
     'storeNum':'029', 
     'brand':'Linksys', 
     'productPrice':'79.99', 
    'SKU':'244129', 
    'productID':'432549', 
    'mpn':'EA6350', 
    'ean':'745883644780', 
     'category':'Wireless Routers', 
    'isMobile':'False' 
}] 

我該如何映射這個JSON到MySQL。這是我需要的輸出。 Here is what i need提前致謝。

+2

1.這不是JSON。 2.您導入'json',但不要使用它。 3.你創建'urls2',但只使用'urls'。 4. JSON文件和你的代碼之間的連接是什麼?這聽起來像你想做一個簡單的SQL插入。你真的嘗試過嗎?我們不是在這裏爲你寫代碼。一個光禿禿的「除了:通過」是一個可怕的想法,至少打印出這個例外。 –

回答

0

這是你可以填充你的數據的SQL INSERT語句一個粗暴的方式。

rows=[ 
[{ 
    'page':'ProductPage', 
     'OAM':'False', 
     'storeNum':'029', 
     'brand':'ASUS', 
     'productPrice':'199.99', 
    'SKU':'576181', 
    'productID':'443759', 
    'mpn':'RT-AC3200', 
    'ean':'886227780914', 
     'category':'Wireless Routers', 
    'isMobile':'False' 
}], 
[{ 
    'page':'ProductPage', 
     'OAM':'False', 
     'storeNum':'029', 
     'brand':'Linksys', 
     'productPrice':'79.99', 
    'SKU':'244129', 
    'productID':'432549', 
    'mpn':'EA6350', 
    'ean':'745883644780', 
     'category':'Wireless Routers', 
    'isMobile':'False' 
}] 
] 


for d in rows: 
    sql = "insert into tableName \n(" 
    recordInfo=d[0] 
    sql += ' '. join ([field for field in recordInfo]) 
    sql += ') \nvalues (' 
    sql += ('***, '*len(recordInfo))[:-2] 
    sql += ') **** \n(' 
    sql += ', '.join (["'%s'" % recordInfo[field] for field in recordInfo]) 
    sql += ')' 
    print (sql) 
    #~ con.execute(sql.replace('****', '%').replace('***',"'%s'"))