请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

【急急急】数据入库时只有一条数据

通过调试时发现,所有的 字段:url_object_id都是一样的,这是个什么情况啊,bobby老师
uid重复了1
uid重复了2

正在回答 回答被采纳积分+3

2回答

bobby 2023-12-18 15:52:21

你把上面两端测试代码和数据贴一下 我本地运行试试呢? 理论上不会出现这种情况

0 回复 有任何疑惑可以回复我~
  • 提问者 beloved1234 #1
    每个回复只能到1200字符,所以只能分多段了,无法上传文件
    回复 有任何疑惑可以回复我~ 2023-12-18 16:31:28
  • 提问者 beloved1234 #2
    blogpark.py
    
    import re
    import json
    import scrapy
    from urllib import parse
    from scrapy import Request
    from selenium import webdriver
    from ArticleSpider.items import BlogParkItem, BlogParkItemLoader
    
    
    
    item_loader = BlogParkItemLoader(item=BlogParkItem(), response=response)
                # add_css(内容, 提取规则)
                # 1.标题
                item_loader.add_css('title', '#news_title  a::text')
                # 2.发布时间
                item_loader.add_css('create_date', '#news_info span.time::text')
                # 3.内容
                item_loader.add_css('content', '#news_content')
                # 4.标签
                item_loader.add_css('tags', '.news_tags a::text')
                # 5.url
                item_loader.add_value('url', response.url)
                # 6.图片
                if response.meta.get("front_image_url", []) :
                    item_loader.add_value("front_image_url",response.meta.get(
                        "front_image_url", []))
    
                article_item = item_loader.load_item()
    
                yield Request(parse.urljoin(response.url,  f'/NewsAjax/GetAjaxNewsInfo?contentId={post_id}'),
                              meta={'article_item' : item_loader},
                              callback=self.parse_nums)
    回复 有任何疑惑可以回复我~ 2023-12-18 16:33:21
  • 提问者 beloved1234 #3
    def parse_nums(self, response) :
            json_data = json.loads(response.text)
            item_loader = response.meta.get('article_item', '')
            ''' 第二种 '''
            item_loader.add_value('praise_nums', json_data['DiggCount'])
            item_loader.add_value('comment_nums', json_data['CommentCount'])
            item_loader.add_value('fav_nums', json_data['TotalView'])
            item_loader.add_value('bury_nums', json_data['BuryCount'])
            item_loader.add_value('url_object_id',aes_encrypt(response.meta.get('url', ''), KEY))
            # item_loader.add_value('url_object_id', generator_md5(response.meta.get('url', '')))
            article_item = item_loader.load_item()
    
            yield article_item
    回复 有任何疑惑可以回复我~ 2023-12-18 16:33:47
提问者 beloved1234 2023-12-18 13:26:32

经过测试,我的 md5 生成的 "url_object_id"字段都是一样的,不是到是什么原因导致的;不知其他同学是怎样的,所以我换成了 aes 

下列是 aes 的 加密方法

如果没有 安装 crypto库的可以使用下列命令安装:

pip install -i https://douban.com/pypi/simple/

 
加密:

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes  # 密钥生成
import base64

''' AES加密 '''
def aes_encrypt(plaintext, key):
    '''
    :param plaintext: 待加密的明文
    :param key: 密钥
    :return: 加密后的密文
    '''
    cipher = AES.new(key, AES.MODE_CBC)
    ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))
    return base64.b64encode(cipher.iv + ciphertext).decode('utf-8')

需要在 爬虫文件中 引入 加密 方法 与 生成密钥的方法 看:③和④

https://img1.sycdn.imooc.com/szimg/657fd7260981a9c115570726.jpg

然后将 md5生成方法替换为 aes生成的方法即可成功

特别要提醒的是:
https://img1.sycdn.imooc.com/szimg/657fd88a095a42ee11100201.jpg

使用 aes 加密时 一定要 引入 密钥,不然无法使用生成且会报错

0 回复 有任何疑惑可以回复我~
  • bobby #1
    问题已解决
    回复 有任何疑惑可以回复我~ 2023-12-22 17:10:13
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号