python 爬取抖音个人分享页面信息保存到数据库

本文介绍了一种从抖音抓取用户数据并将其存储至MySQL数据库的方法,利用Python的requests库进行网页请求,BeautifulSoup库解析HTML,Redis作为缓存队列,最后使用pymysql将数据存入数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注释:本文仅用于技术学习

1、分享链接存入缓存redis

2、python读取缓存队列信息

3、访问页面解析页面的值

4、存入mysql数据库

redis缓存如图事先存入队列,数据库存储结果

数据库结构

CREATE TABLE `tj_douyin` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `dy_id` varchar(50) DEFAULT NULL,
  `dy_name` varchar(100) DEFAULT NULL COMMENT '名字',
  `focus` int(11) DEFAULT NULL COMMENT '关注数',
  `follower` int(11) DEFAULT NULL COMMENT '粉丝数',
  `liked` int(11) DEFAULT NULL COMMENT '赞数量',
  `works` int(11) DEFAULT NULL COMMENT '作品数',
  `like` int(11) DEFAULT NULL COMMENT '喜欢数',
  `datetime` bigint(11) NOT NULL COMMENT '写入时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;

代码部分:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Date  : 2019/10/29
import requests
import pymysql
import time
import redis

from bs4 import BeautifulSoup as bs

# unicode对应的数字
change = {
    ('\ue602', '\ue60E', '\ue618'): '1',
    ('\ue603', '\ue60d', '\ue616'): '0',
    ('\ue604', '\ue611', '\ue61a'): '3',
    ('\ue605', '\ue610', '\ue617'): '2',
    ('\ue606', '\ue60c', '\ue619'): '4',
    ('\ue607', '\ue60f', '\ue61b'): '5',
    ('\ue608', '\ue612', '\ue61f'): '6',
    ('\ue609', '\ue615', '\ue61e'): '9',
    ('\ue60a', '\ue613', '\ue61c'): '7',
    ('\ue60b', '\ue614', '\ue61d'): '8'
}

"""
change = {
    '\ue602': '1', '\ue60E': '1', '\ue618': '1',
    '\ue603': '0', '\ue60d': '0', '\ue616': '0',
    '\ue604': '3', '\ue611': '3', '\ue61a': '3',
    '\ue605': '2', '\ue610': '2', '\ue617': '2',
    '\ue606': '4', '\ue60c': '4', '\ue619': '4',
    '\ue607': '5', '\ue60f': '5', '\ue61b': '5',
    '\ue608': '6', '\ue612': '6', '\ue61f': '6',
    '\ue609': '9', '\ue615': '9', '\ue61e': '9',
    '\ue60a': '7', '\ue613': '7', '\ue61c': '7',
    '\ue60b': '8', '\ue614': '8', '\ue61d': '8'
}
"""

cites_codes = []
Team_name = 'dou_yin'  # redis队列名
soup = ''


# 将爬到的单个unicode编码放到这个函数会返回对应的数字
def change_2_num(code):
    for i in change:
        try:
            if code.split()[0] in i:
                return change[i]
        except:
            print('函数change_2_num出错', code.split())
    return code


# 请求链接,返回soup对象
def get_html(url):
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60"}
    r = requests.get(url, headers=headers, verify=False)
    if not len(r.text) > 10000:
        return
    soup = bs(r.text, 'lxml')
    return soup


def get_num(name, attrs):
    fin = ''
    res = soup.find_all(name=name, attrs={'class': attrs})
    if res:
        mid = res[0].text.split()
        # 将获取的文本以空格切成列表,不切的话因为空格的存在会返回''而不是uincode编码
    else:
        return
    for code in mid:
        fin += change_2_num(code)
        # 遍历文本内容,如果是unicode编码则返回对应数字
    # print(fin)
    return fin


# 存储到数据库函数
def store_2_mysql():
    # 连接数据库改成自己的新建一个数据库加表
    conn = pymysql.connect(host='127.0.0.1', user='root', password='', database='test_tianqi', port=3306)
    cursor = conn.cursor()
    # 遍历列表存入数据库
    for i in cites_codes:
        sql = '''
            insert into tj_douyin values(0,'%s','%s','%s','%s','%s','%s','%s','%s')''' % (
            i[0], i[1], i[2], i[3], i[4], i[5], i[6], int(time.time()))
        cursor.execute(sql)
    # 提交
    conn.commit()
    conn.close()


# 查询数据
def select_redis():
    # 连接redis
    con = redis.Redis(
        host='127.0.0.1',
        port=6379,
        db=1,  # redis库顺序
        decode_responses=True  # 设置为True返回的数据格式就是时str类型
    )

    length = con.llen(Team_name)  # 查看队列长度

    if length > 0:
        val = con.lpop(Team_name)  # 取出第一个队列
    else:
        val = ''

    return val


def main():
    global soup
    soup = get_html(url)
    if not soup:
        return
    try:

        nickname = soup.find(name='p', attrs={'class': 'nickname'}).string  # 获取html内容名字
        # print(nickname)
        signature = soup.find(name='p', attrs={'class': 'signature'}).string
        # print(signature)
        dyID = get_num('p', "shortid").replace('抖音ID:', '')
        focus = get_num('span', "focus").replace('关注', '')
        follower = get_num('span', "follower").replace('粉丝', '')
        liked = get_num('span', "liked-num").replace('赞', '')
        works = get_num('div', "user-tab").replace('作品', '')
        like = get_num('div', "like-tab").replace('喜欢', '')

        # 拼接字典
        city_code = [dyID, nickname, focus, follower, liked, works, like]
        cites_codes.append(city_code)
        store_2_mysql()  # 调用数据库参数
    except:
        return


if __name__ == '__main__':
    url = select_redis()
    main()

代码部分借鉴:

https://www.cnblogs.com/byadmin/p/11441137.html

 

<think>嗯,用户让我帮忙写Stable Diffusion的正向和反向提示词,专门用来生成“吾皇万睡”这个IP的内容。首先,我需要确认一下“吾皇万睡”是什么。我记得这是一个很受欢迎的卡通形象,主角是一只胖胖的猫咪,还有一只叫巴扎黑的小狗,对吧?它们的画风通常是简洁的线条,带有幽默和温馨的感觉,颜色比较明亮,场景也多是日常生活中的搞笑情景。 接下来,用户可能需要的是生成符合这个IP风格的图片,所以正向提示词要包括角色特征、画风、颜色、背景等元素。可能还要考虑是否需要特定的姿势或表情,比如猫咪的傲娇样子,或者和巴扎黑的互动。反向提示词的话,应该排除不符合风格的元素,比如低质量、写实风格、复杂背景等。 用户可能没有明确说,但可能需要提示词足够具体,同时又有一定的灵活性,让Stable Diffusion能够生成多样化的图片。此外,可能还需要考虑光照、渲染效果,比如柔和的阴影或者卡通渲染,来贴近原作的风格。还有可能需要避免一些常见的错误,比如变形的手脚,不协调的比例,这在反向提示词里应该提到。 另外,用户可能对技术细节不太熟悉,所以需要解释每个部分的作用,比如为什么加入“高对比度”或“简洁线条”,以及反向提示词中为什么排除某些元素。这样用户在使用时可以根据需要调整参数,比如调整权重或者添加细节。 还要考虑到用户可能希望生成不同场景的图片,比如室内、室外,或者特定的节日主题,所以在正向提示词里可以加入变量,比如“在沙发上”、“在花园里”等,并建议用户根据需要替换。同时,反向提示词中的“复杂纹理”或“混乱背景”有助于保持画面简洁,符合原IP风格。 最后,需要提醒用户可能需要多次尝试,调整提示词和参数,比如采样步骤、CFG值等,才能达到最佳效果。可能还需要注意版权问题,确保生成的图片符合“吾皇万睡”的使用规范,如果有商用需求的话,可能需要官方授权。</think>以下是针对**吾皇万睡**IP风格设计的Stable Diffusion提示词模板,结合了该IP的萌系画风、角色特征和场景特点: --- ### **正向提示词(Positive Prompts)** ``` (masterpiece, best quality), 1.5岁中国短毛猫, 肥胖体型, 傲娇表情, 圆润大眼睛, (巴扎黑小狗:1.2), 扁平卡通画风, 简洁线条, 高明度色彩, 柔和的阴影, 浅色背景, 日常生活场景, [场景描述: 在沙发上/在纸箱里/偷吃小鱼干], 幽默治愈氛围, 高对比度轮廓, 二次元渲染, 手绘质感, 干净构图, IP风格一致性 ``` **可替换/扩展项** - 场景:`办公室捣乱`/`阳台晒太阳`/`与巴扎黑抢食` - 动作:`歪头杀`/`翻白眼`/`伸懒腰` - 细节:`毛绒质感`/`肉垫特写`/`蝴蝶结项圈` --- ### **反向提示词(Negative Prompts)** ``` (worst quality, low quality:1.4), 写实风格, 复杂背景, 暗黑系, 恐怖元素, 畸形肢体, 多余手指, 文字水印, 噪点模糊, 过度渲染, 血腥暴力, (3D模型:1.3), 赛博朋克, 机械结构, 复杂纹理, 真人照片, 抽象艺术 ``` --- ### **关键参数建议**(需根据模型调整) - **采样器**:DPM++ 2M Karras 或 Euler a - **步数**:25-35步 - **分辨率**:建议768x768(保持IP简洁画风) - **CFG Scale**:7-9(避免过度锐化) - **推荐模型**:国风动模型(如ChinaDollLikeness_v30)或扁平插画专用模型 --- ### **注意事项** 1. 可添加`--no [毛色杂乱]`强化标志性虎斑纹 2. 若需强调IP商业属性,可加入`周边设计感`、`可印刷矢量风` 3. 推荐使用LoRA控制角色一致性(需提前训练角色特征) 需要生成特定场景案例(如春节/万圣节主题)可补充说明,可提供更细化的提示词组合~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值