日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql多重主键错误,老师,jd_spider中数据插入Mysql时一直显示主键错误,求助~

發(fā)布時(shí)間:2025/3/21 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql多重主键错误,老师,jd_spider中数据插入Mysql时一直显示主键错误,求助~ 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

老師,jd_spider中數(shù)據(jù)插入Mysql時(shí)一直顯示主鍵錯(cuò)誤,求助~

而且peewee會(huì)自動(dòng)生成一個(gè)goods表的主鍵

萬分感謝!

建立表的代碼如下

from peewee import *

db = MySQLDatabase('spider', host='localhost', port=3306, user='root', password='a83421967')

class BaseModel(Model):

class Meta:

database = db

class Goods(BaseModel):

id = IntegerField(primary_key=True, verbose_name="商品id")

name = CharField(max_length=500, verbose_name="商品名稱")

description = TextField(default="", verbose_name="商品描述")

price = FloatField(default=0.0, verbose_name="商品價(jià)格")

supplier = CharField(default="", verbose_name="商品銷售商")

product_content = TextField(default="", verbose_name="規(guī)格包裝")

comments_nums = CharField(default='0', verbose_name="商品評(píng)論數(shù)")

images_list = TextField(default="", verbose_name="輪播圖片地址")

good_rate = FloatField(default=0.0, verbose_name="好評(píng)率")

image_comments_nums = CharField(default='0', verbose_name="評(píng)論曬圖數(shù)")

video_comments_nums = CharField(default='0', verbose_name="評(píng)論視頻數(shù)")

add_comment_nums = CharField(default='0', verbose_name="追評(píng)數(shù)")

well_comment_nums = CharField(default='0', verbose_name="好評(píng)率")

medium_comment_nums = CharField(default='0', verbose_name="中評(píng)率")

bad_comment_nums = CharField(default='0', verbose_name="差評(píng)數(shù)")

class GoodsEvaluate(BaseModel):

id = CharField(primary_key=True)

goods_id = ForeignKeyField(Goods, verbose_name="商品id")

user_head_url = CharField(verbose_name="用戶頭像")

user_name = CharField(verbose_name="用戶名")

good_info = CharField(max_length=500, verbose_name="購買的商品的信息")

evaluate_time = DateTimeField(verbose_name="評(píng)價(jià)時(shí)間")

content = TextField(default="", verbose_name="評(píng)論內(nèi)容")

star = IntegerField(default=0, verbose_name="評(píng)分")

comment_nums = IntegerField(default=0, verbose_name="評(píng)論數(shù)")

praised_nums = IntegerField(default=0, verbose_name="點(diǎn)贊數(shù)")

image_list = TextField(default="", verbose_name="圖片")

video_list = TextField(default="", verbose_name="視頻")

class GoodsEvaluateSummary(BaseModel):

id = AutoField()

goods_id = ForeignKeyField(Goods, verbose_name="商品id")

tag = CharField(max_length=20, verbose_name="評(píng)論標(biāo)簽")

tag_nums = IntegerField(default=0, verbose_name="該標(biāo)簽評(píng)論數(shù)")

if __name__ == "__main__":

db.create_tables([Goods, GoodsEvaluate, GoodsEvaluateSummary])

jd_spider代碼如下

import json

import time

import re

from datetime import datetime

from selenium import webdriver

from scrapy import Selector

from selenium.common.exceptions import NoSuchElementException

from jd_spider.model_charts import *

browser = webdriver.Chrome(executable_path=r"E:\王雨\python\chromedriver_win32\chromedriver.exe")

def process_value(nums_str):

"""

將字符型的數(shù)字轉(zhuǎn)換成數(shù)字

:param nums_str:字符型數(shù)字

:return:成功返回?cái)?shù)字,默認(rèn)返回零

"""

nums = 0

re_search = re.search(r"\d+", nums_str)

if re_search:

nums = re_search.group(0)

if "萬" in nums_str:

nums *= 10000

return nums

def get_goods(goods_id):

url = "https://item.jd.com/{}.html".format(goods_id)

browser.get(url)

# 提取商品基本信息

sel = Selector(text=browser.page_source)

goods = Goods(id=goods_id)

name = "".join(sel.xpath("//div[@class='sku-name']/text()").extract()).strip()

goods.name = name

price = sel.xpath("//span[@class='price J-p-{}']/text()".format(goods_id)).extract_first()

price = float(price)

goods.price = price

detail = "".join(sel.xpath("//div[@id='detail']//div[@class='tab-con']").extract())

goods.description = detail

img_list = sel.xpath("//div[@id='spec-list']//img/@src").extract()

goods.images_list = json.dumps(img_list)

supplier = "".join(sel.xpath("//div[@id='summary-service']").extract())

supplier_info = re.search(r'

if supplier_info:

goods.supplier = supplier_info.group(1)

else:

goods.supplier = "京東"

# 模擬點(diǎn)擊規(guī)格包裝獲取信息

ggbj_ele = browser.find_element_by_xpath("//li[contains(text(),'規(guī)格與包裝')]")

ggbj_ele.click()

time.sleep(3)

sel = Selector(text=browser.page_source)

ggbj = "".join(sel.xpath("//div[@id='detail']/div[@class='tab-con']").extract())

goods.product_content = ggbj

# 模擬點(diǎn)擊商品評(píng)價(jià)獲取評(píng)價(jià)信息

sppj_ele = browser.find_element_by_xpath("//li[@data-anchor='#comment']")

sppj_ele.click()

time.sleep(3)

dqpj_ele = browser.find_element_by_xpath("//input[@id='comm-curr-sku']")

dqpj_ele.send_keys("\n")

time.sleep(3)

sel = Selector(text=browser.page_source)

good_rate = "".join(sel.xpath("//div[@class='percent-con']/text()").extract()).strip()

goods.good_rate = float(good_rate)/100

tag_list = sel.xpath("//div[@class='tag-list tag-available']//span/text()").extract()

summary_list = sel.xpath("//ul[@class='filter-list']//li/a")

for a in summary_list:

name = a.xpath("./text()").extract()[0]

nums = a.xpath("./em/text()").extract()[0]

nums = process_value(nums)

if name == "全部評(píng)價(jià)":

goods.comments_nums = nums

if name == "曬圖":

goods.image_comments_nums = nums

if name == "視頻曬單":

goods.video_comments_nums = nums

if name == "追評(píng)":

goods.add_comment_nums = nums

if name == "好評(píng)":

goods.well_comment_nums = nums

if name == "中評(píng)":

goods.medium_comment_nums = nums

if name == "差評(píng)":

goods.bad_comment_nums = nums

# 保存商品信息

existed_goods = Goods().select().where(Goods.id == goods.id)

if existed_goods:

goods.save()

else:

goods.save(force_insert=True)

for tag in tag_list:

re_match = re.match(r"(.+)\((\d+)\)", tag)

if re_match:

name = re_match.group(1)

nums = int(re_match.group(2))

existed_tag = GoodsEvaluateSummary.select().where(GoodsEvaluateSummary.goods_id==goods, GoodsEvaluateSummary.tag==name)

if existed_tag:

summary = existed_tag[0]

else:

summary = GoodsEvaluateSummary(goods_id=goods.id)

summary.tag = name

summary.tag_nums = nums

summary.save()

# 獲取商品評(píng)價(jià)詳情

have_next_page = True

while have_next_page:

all_div = sel.xpath("//div[@class='comment-item']")

for div in all_div:

good_evaluate = GoodsEvaluate(goods_id=goods.id)

user_name = "".join(div.xpath(".//div[@class='user-info']/text()").extract()).strip()

good_evaluate.user_name = user_name

user_img_url = div.xpath(".//div[@class='user-info']/img/@src").extract_first()

good_evaluate.user_head_url = user_img_url

comment_info = "".join(div.xpath(".//p[@class='comment-con']/text()").extract()).strip()

good_evaluate.content = comment_info

star_nums = div.xpath(".//div[contains(@class,'comment-star')]/@class").extract_first()

good_evaluate.star = int(star_nums[-1])

praise_nums = "".join(div.xpath(".//i[@class='sprite-praise']/../text()").extract()).strip()

good_evaluate.praised_nums = int(praise_nums)

comment_nums = "".join(div.xpath(".//i[@class='sprite-comment']/../text()").extract()).strip()

good_evaluate.comment_nums = comment_nums

order_info = div.xpath(".//div[@class='order-info']/span/text()").extract()

order_detail = order_info[:-1]

good_evaluate.good_info = json.dumps(order_detail)

good_evaluate.evaluate_time = datetime.strptime(order_info[-1], "%Y-%m-%d %H:%M")

comment_img = div.xpath(".//div[@class='pic-list J-pic-list']/a/img/@src").extract()

good_evaluate.image_list = json.dumps(comment_img)

comment_video = div.xpath(".//div[@class='J-video-view-wrap clearfix']//video/@src").extract()

good_evaluate.video_list = json.dumps(comment_video)

evaluate_id = div.xpath("./@data-guid").extract()[0]

good_evaluate.id = evaluate_id

existed_evaluate = GoodsEvaluate.select().where(GoodsEvaluate.id == good_evaluate.id)

if existed_evaluate:

good_evaluate.save()

else:

good_evaluate.save(force_insert=True)

try:

next_page_ele = browser.find_element_by_xpath("//div[@class='com-table-footer']//a[@class='ui-pager-next']")

next_page_ele.send_keys("\n")

sel = Selector(text=browser.page_source)

except NoSuchElementException as e:

have_next_page = False

if __name__ == "__main__":

get_goods(56166176873)

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的mysql多重主键错误,老师,jd_spider中数据插入Mysql时一直显示主键错误,求助~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。