Вопрос:
У меня есть скрипт Python для очистки, и веб-сайт получает 2 переменные и сохраняет их в 2 списках.Затем я использую executemany, чтобы обновить базу данных MySQL, используя одну переменную, чтобы соответствовать существующей строке, чтобы вставить другую переменную.
Код:
Python Script
import mysql.connector
from bs4 import BeautifulSoup as soup
from selenium import webdriver
import time, re
mydb = mysql.connector.connect(
host="host",
user="user",
passwd="passwd",
database="database"
)
mycursor = mydb.cursor()
d = webdriver.Chrome('D:/Uskompuf/Downloads/chromedriver')
d.get('https://au.pcpartpicker.com/products/cpu/overall-list/#page=1')
def cpus(_source):
result = soup(_source, 'html.parser').find('ul', {'id':'category_content'}).find_all('li')
_titles = list(filter(None, [(lambda x:'' if x is None else x.text)(i.find('div', {'class':'title'})) for i in result]))
data = [list(filter(None, [re.findall('(?<=\().*?(?=\))', c.text) for c in i.find_all('div')])) for i in result]
return _titles, [a for *_, [a] in filter(None, data)]
_titles, _cpus = cpus(d.page_source)
sql = "UPDATE cpu set family = %s where name = %s"
mycursor.executemany(sql, list(zip(_cpus, _titles)))
print(sql, list(zip(_titles, _cpus)))
_last_page = soup(d.page_source, 'html.parser').find_all('a', {'href':re.compile('#page\=\d+')})[-1].text
for i in range(2, int(_last_page)+1):
d.get(f'https://au.pcpartpicker.com/products/cpu/overall-list/#page={i}')
time.sleep(3)
_titles, _cpus = cpus(d.page_source)
sql = "UPDATE cpu set family = %s where name = %s"
mycursor.executemany(sql, list(zip(_cpus, _titles)))
mydb.commit()
MySQL UPDATE code
sql = "UPDATE cpu set family = %s where name = %s"
mycursor.executemany(sql, list(zip(_cpus, _titles)))
MySQL UPDATE print print
print(sql, list(zip(_cpus, _titles)))
MySQL UPDATE code print print
UPDATE cpu set family = %s where name = %s [('Pinnacle Ridge', 'AMD Ryzen 5 2600'), ('Coffee Lake-S', 'Intel Core i7-8700K'),...
Первые 2 строки таблицы
Ожидаемый результат
Первая переменная - это имя, и это переменная, с которой необходимо сопоставить, вторая переменная - это семейство, которое необходимо обновить до строки,Имя полностью совпадает, и при запуске программы ошибок нет, однако все семейные значения равны нулю.
Не уверен, что лучший способ решить эту проблему, хотя я мог бы сделать скрипку, но не уверен насчет спискаin executemany?
Другое
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Спасибо