Se supone que este código encuentra los primeros 20 auriculares del sitio y luego obtiene el nombre y el precio del artículo. Luego insértelos en la base de datos (en la tabla "proyecto").
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()Cuando quiero insertarlos en mi base de datos (en la tabla "proyecto"), no funciona y sé que el problema está en esta parte de mi código:
for num in range(20): cursor.execute('INSERT INTO project VALUES(%s,%s)',(item[num].text,price[num].text))La estructura de la mesa:
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | filename | varchar(100) | YES | | NULL | | | price | varchar(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+Tengo estos errores:
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 1Es causado por la codificación de la base de datos, modifique la codificación de la base de datos.
ALTER TABLE project CONVERT TO CHARACTER SET utf8mb4;Prueba esto.
cursor.execute('INSERT INTO project VALUES(%s,%s)',(item[num].text,price[num].text))Si no, publique la estructura de su proyecto de tabla.
Prueba algo como a continuación. Supongo que funcionará.
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()