代码拉取完成,页面将自动刷新
同步操作将从 二毛/抖音爬虫 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- encoding: utf-8 -*-
'''
@File : exec.py
@Time : 2023年06月19日 20:29:33 星期一
@Author : erma0
@Version : 1.0
@Link : https://erma0.cn
@Desc : 抖音爬虫命令行
'''
import os
import click
from loguru import logger
from browser import Browser
from spider import Douyin
@click.command()
@click.option('-u', '--urls', type=click.STRING, multiple=True, help='账号/话题/音乐等URL或文件路径(文件内一行一个URL),可多次输入。采集本账号喜欢/收藏/关注/粉丝时可空')
@click.option('-n', '--num', default=-1, help='选填。最大采集数量,默认不限制')
@click.option('-g', '--grab', is_flag=True, help='选填。只采集信息,不下载作品')
@click.option('-d', '--download', is_flag=True, help='选填。不采集,直接下载之前采集过的配置文件,用于下载失败时重试')
@click.option('-l', '--login', default=True, is_flag=True, help='选填。指定是否登录,默认要登录,可避免一些风控,采集关注粉丝等信息时必须登录')
@click.option('-m', '--mstoken', default=False, is_flag=True, help='选填。指定是否在下载配置文件中设置UA及mstoken,默认不需要,出现下载0kb时尝试使用此参数')
@click.option('-h', '--headless', default=True, is_flag=True, help='选填。指定是否使用headless模式(不显示浏览器界面),默认为True,出现问题时使用此参数以便观察')
@click.option('-t',
'--type',
type=click.Choice(['post', 'like', 'music', 'search', 'follow', 'fans', 'collection', 'video', 'favorite', 'id'],
case_sensitive=False),
default='post',
help='选填。采集类型,支持[主页作品/喜欢/音乐/搜索/关注/粉丝/合集/单作品/收藏/抖音号查信息],默认采集post作品,能够自动识别搜索/音乐/合集/单作品以及本账号的喜欢/收藏。')
@click.option('-b',
'--browser',
type=click.Choice(["chrome", "msedge", "chrome-beta", "msedge-beta", "msedge-dev"], case_sensitive=False),
default='msedge',
help='选填。浏览器类型,默认使用稳定版EDGE,可选[chrome/msedge]以及beta或dev版本,如需使用Firefox或WebKit请自行修改browser文件')
@click.option('-p', '--path', type=click.STRING, default='下载', help='选填。下载文件夹,默认为[下载]')
@click.option('-pt',
'--pathtype',
type=click.Choice(["id", "title"], case_sensitive=False),
default='id',
help='选填。文件夹命名格式,默认为[type]_[id],可选[title](不需要主页作品增量采集时建议填title,即使用[标题/昵称/关键词]来命名)')
def main(urls, num, grab, download, login, mstoken, headless, type, browser, path, pathtype):
"""
命令行
"""
if not urls: # 未输入目标地址
if type in ['like', 'favorite', 'follow', 'fans']: # 采集本账号
edge = Browser(channel=browser, headless=headless)
start(edge.context, urls, num, grab, download, type, path, pathtype, mstoken)
edge.stop()
return
elif type in ['post', 'music', 'search', 'collection', 'video']: # 自动识别类型
urls = (input('目标URL或文件路径:'), )
else:
print('请输入目标URL或文件路径')
return
edge = Browser(channel=browser, need_login=login, headless=headless)
for url in urls:
if os.path.exists(url): # 文件路径
with open(url, 'r', encoding='utf-8') as f:
lines = f.readlines()
if lines:
for line in lines:
start(edge.context, line, num, grab, download, type, path, pathtype, mstoken)
else:
logger.error(f'[{url}]中没有发现目标URL')
else:
start(edge.context, url, num, grab, download, type, path, pathtype, mstoken)
edge.stop()
def start(context, url, num, grab, download, type, path, pathtype, mstoken):
a = Douyin(context, url, num, type, path, pathtype, mstoken)
if download: # 不需要新采集
a.has_more = False
a.run()
if grab or type in ['follow', 'fans', 'id']: # 不需要下载
return
a.download()
if __name__ == "__main__":
main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。