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

Posted

技术标签:

【中文标题】使用mysql连接器python将值插入数据库,网络抓取【英文标题】:inserting values into database using mysql connector python, web scraping 【发布时间】:2020-10-25 07:50:55 【问题描述】:

此代码应该从网站上找到前 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

【问题讨论】:

【参考方案1】:

是数据库编码引起的,修改数据库编码。

ALTER TABLE project CONVERT TO CHARACTER SET utf8mb4;

试试这个。

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

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

【讨论】:

谢谢回答,没用,我编辑了帖子,把项目表的结构放在了帖子的最后,请在那里查看 @amir 你有任何错误信息吗?请张贴。 @amir 我改变了答案。 我没有收到任何错误,但没有任何内容插入到项目表的值中。可能是什么问题? @amir 你需要提交事务 (cnx.commit())【参考方案2】:

试试下面的方法。我想它会起作用的。

for container in soup.find_all(class_='c-product-box')[:20]:
    item_title = container.find(class_='c-product-box__title').get_text(strip=True)
    item_price = container.find(class_='c-price__value-wrapper').get_text(strip=True)
    cursor.execute('INSERT INTO project (item_header,price_header) VALUES (%s,%s)',(item_title,item_price))

cnx.commit()
cnx.close()

【讨论】:

以上是关于使用mysql连接器python将值插入数据库,网络抓取的主要内容,如果未能解决你的问题,请参考以下文章

mysql将值插入表中?

Mysql - 将值插入具有未知主键的多个表中

如果值不存在,将值插入 MySQL 表?

使用 JQuery 将值插入 mySQL

Python MySQLdb 面向对象

在python中使用mysql连接器插入数据