在 Python 中将 HTML 存储到 mysql

Posted

技术标签:

【中文标题】在 Python 中将 HTML 存储到 mysql【英文标题】:Storing HTML to mysql in Python 【发布时间】:2015-01-24 16:24:28 【问题描述】:

我需要存储最初存储在本地的已爬取 html 页面。我正在使用成功打开文件

myHTML = open(file_location,'r').read()   

输出可从这里获得:http://shrib.com/jqR5uf0C

我也成功创建了 SQL 查询:

query_insert = ("insert into job_html (processid, myURL, myhtml) VALUES (%d, %s, %s)", processid, my_url, str(myHTML))

但由于某种原因,HTML 没有正确转义,因为我无法通过 Python 或手动插入它。

我也收到以下 Python 错误:

AttributeError: 'tuple' object has no attribute 'encode'

感谢 Python 新手的任何帮助 ;-)

代码:

def extractText(file_location,processid,my_url):

import mysql.connector

iwr_db = mysql.connector.connect(user='iwr', password='iwr',
                          host='127.0.0.1',
                          database='iwr_1')

myHTML = open(file_location,'r').read()
query_insert = ("insert into job_html (processid, myURL, myhtml) VALUES (%d, %s, %s)", processid, my_url, str(myHTML))
print query_insert

cursor_insert = iwr_db.cursor(buffered=True)
cursor_insert.execute(query_insert)
iwr_db.commit()

【问题讨论】:

a) 实际 MySQLdb 执行调用和 b) 完整回溯在哪里? 在同一个函数中。它就像我用正确导入的简单字符串替换 HTML 一样。当我打印 SQL 查询并尝试手动将其插入 mysql 时,它也会失败。不知道你所说的“回溯”是什么意思 叹息。当我说“它在哪里”时,我的意思是“请把它贴出来”。 谢谢 Daniel - 查看修改后的帖子 【参考方案1】:

问题在于,出于某种原因,您将查询定义为元组,然后尝试将其直接传递给 execute 命令。

我认为您对这之间的区别感到困惑:

query = ('foo', bar, baz)
execute(query)

还有这个:

execute('foo', bar, baz)

首先,您定义一个元组,然后将其作为 single 参数传递给execute - 因此出现有关元组的错误消息。当然,在第二个中,您将三个单独的参数传递给execute

可以在调用执行时使用所谓的“元组解包”来解决此问题:

execute(*query)

但在您的情况下,将查询字符串定义为一个变量会更容易,然后将其余部分直接传递给执行:

query_insert = "insert into job_html (processid, myURL, myhtml) VALUES (%s, %s, %s)"
cursor.execute(query_insert, processid, my_url, str(myHTML))

(另请注意,MySQLdb 查询字符串的 all 参数必须使用 %s,即使它们是整数。)

【讨论】:

效果很好,丹尼尔!!!只需在参数集周围添加括号: cursor.execute(query_insert, (processid, my_url, str(myHTML)))

以上是关于在 Python 中将 HTML 存储到 mysql的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将单引号存储到postgres [重复]

在python3中将日期值存储到sqlite表中

在Python中将函数的结果存储到可检索的DataFrame中[重复]

在 Python >= 3.2 中将缓存存储到文件 functools.lru_cache

Azure:使用容器创建存储帐户并在 Python 中将 blob 上传到其中

如何在python3.6中将字符串转换为唯一的整数,反之亦然(在0到255之间)