[我用来将页面信息插入MySQL数据库的python解析器正在产生一个空表。我的代码有什么问题?

问题描述 投票:0回答:1

我目前使用python解析器遇到了障碍,我应该使用该解析器从跟踪密歇根州COVID-19病例的网站中提取信息。解析器正在利用python的XML Dom Minidom库,并按预期工作,但是当我打算将信息插入MySQL数据库时,它不会产生任何结果,而是有一个空表。我不确定我的代码有什么问题,并且我已经尝试了多种方法,包括:

  • 将存储刮取数据的列表转换为元组
  • 遍历列表并执行插入语句...以及其他一些细微调整均无济于事。该表应该具有以下格式的县名,已确认的病例和已确认的死亡:

+ -------------- + ---------------- + --------------- -+

|县名|案例确认|已确认死亡|

+ -------------- + ---------------- + --------------- -+

有人可以帮我吗?

这里是文件parser.py:

import sys
import xml.dom.minidom
import MySQLdb
document = xml.dom.minidom.parse(sys.argv[1])
tableElements = document.getElementsByTagName('table')

db = MySQLdb.connect(
      host="localhost",
      user="root",
      passwd="root",
      db="temp"
)

curr = db.cursor()

curr.execute("CREATE DATABASE IF NOT EXISTS cases")
curr.execute("USE cases")
query = "CREATE TABLE IF NOT EXISTS casesBreakdown (countyName varchar(255), confirmedCases INT, confirmedDeaths INT, newCases INT, newDeaths INT)"
curr.execute(query)

#for tr in tableElements[1].getElementsByTagName('tr'):
for tr in tableElements[0].getElementsByTagName('tr'):
      data = []
      for td in tr.getElementsByTagName('td'):
      for node in td.childNodes:
              if node.nodeType == node.TEXT_NODE:
                  data.append(node.nodeValue)
      x = ",".join(data)
      test = []
      for case in x.split(","):
          test.append(case)
      #print(test)
sql = "INSERT INTO casesBreakdown (countyName, confirmedCases, confirmedDeaths) VALUES (%s, %s, %s)"
curr.executemany(sql, test)

db.commit()

这是指向我使用作为命令行参数arg传递的tagsoup转换为xhtml的页面的链接:https://pastebin.com/JU8cDJJ5

任何帮助将不胜感激。谢谢!

python mysql parsing xhtml
1个回答
0
投票

现在可以使用,我将进行最后的调试。一个问题是您经常重新初始化test = []。另一个问题是缩进,但是很难确定那是否是将代码转录为SO。

test = []
for tr in tableElements[0].getElementsByTagName('tr'): 
    data = [] 
    for td in tr.getElementsByTagName('td'): 
        for node in td.childNodes:   
            if node.nodeType == node.TEXT_NODE: 
                data.append(node.nodeValue) 
            t = tuple(data) 
            if len(t) == 3: 
                test.append(t) 
© www.soinside.com 2019 - 2024. All rights reserved.