python - 使用 mysql 连接器 python,网络抓取将值插入数据库

标签 python mysql sql web-scraping mysql-connector-python

这段代码应该从网站上找到前 20 款耳机,然后获取商品的名称和价格。然后将它们插入数据库(“项目”表)。

import requests
from bs4 import BeautifulSoup
import mysql.connector

cnx=mysql.connector.connect(user="root",password='test',host='127.0.0.1',database='amirdb')
cursor=cnx.cursor()
response=requests.get(f"https://www.digikala.com/search/?q=headphone")
soup=BeautifulSoup(response.text,"html.parser")

container=soup.find("ul",{'class':'c-listing__items'})
item=container.find_all("div",{'class':'c-product-box__title'})
price=container.find_all("div",{'class':'c-price__value-wrapper'})

for num in range(20):
    cursor.execute('INSERT INTO project VALUES(%s,%s)',(item[num].text,price[num].text))
cnx.commit()
cnx.close()

当我想将它们插入我的数据库(“项目”表)时,它不起作用,我知道问题出在我的代码的这一部分:

for num in range(20):
        cursor.execute('INSERT INTO project VALUES(%s,%s)',(item[num].text,price[num].text))

上面这部分代码有什么问题?

表的结构:

+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| filename | varchar(100) | YES  |     | NULL    |       |
| price    | varchar(100) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

我遇到了这些错误:

Traceback (most recent call last):
  File "C:/Users/Administratör/PycharmProjects/untitled/venv/seventh.py", line 13, in <module>
    cursor.execute('INSERT INTO project VALUES(%s,%s)',(item[num].text,price[num].text))
  File "C:\Users\Administratör\PycharmProjects\untitled\venv\lib\site-packages\mysql\connector\cursor.py", line 551, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "C:\Users\Administratör\PycharmProjects\untitled\venv\lib\site-packages\mysql\connector\connection.py", line 490, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "C:\Users\Administratör\PycharmProjects\untitled\venv\lib\site-packages\mysql\connector\connection.py", line 395, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.DatabaseError: 1366 (HY000): Incorrect string value: '\xD9\x87\xD8\xAF\xD9\x81...' for column 'filename' at row 1

最佳答案

数据库编码问题,修改数据库编码。

ALTER TABLE project CONVERT TO CHARACTER SET utf8mb4;

试试这个。

cursor.execute('INSERT INTO project VALUES(%s,%s)',(item[num].text,price[num].text))

如果没有,请发布您的表项目的结构。

关于python - 使用 mysql 连接器 python,网络抓取将值插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62734872/

相关文章:

python - 在每个列表项中的字符之后删除所有列表项中的文本 Python

mysql - 将列值从一个表复制到另一个匹配的 ID

sql - 在子查询中如何获取 max() 组的值?

mysql - 如何获取表之间的关系并区分一对一和一对多?

c# - asp.net mvc 4.5 使用 like 或 distinct

python - 如何在 Python 中编写一个在 20 个不同的 csv 文件上运行该函数的函数?

python - 如何在 selenium 远程 webdriver 中指定浏览器二进制文件?

python - 存储 Python RegEx 多个组

mySQL 与 sqlite 别名不兼容?

mysql - 子查询连接失败