在 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 [重复]
在Python中将函数的结果存储到可检索的DataFrame中[重复]
在 Python >= 3.2 中将缓存存储到文件 functools.lru_cache