Tiktok에서 유용한 정보를 긁어 내고 다운로드하십시오.
이것은 공식 API 지원 등이 아닙니다. 이것은 Tiktok Web API를 사용하여 미디어 및 관련 메타 정보를 스크레이프하는 스크레이퍼입니다.
특징
할 일
기부금
설치
용법
행동 양식
옵션
약속과 함께 사용하십시오
이벤트와 함께 사용하십시오
세션 값을 얻는 방법
비디오에 액세스/다운로드하는 방법
출력 예제
비디오 피드 방법
getuserprofileinfo
gethashtaginfo
getvideometa
getMusicInfo
짓다
달리다
터미널 예제
다운로드 기록 관리
배치로 긁고 다운로드하십시오
출력 파일 예제
터미널에서
도커
기준 치수
지금 당장 워터 마크없이 비디오를 다운로드 할 수 없습니다.
사용자, 해시 태그, 트렌드 또는 Music-ID 페이지에서 무제한 포스트 메타 데이터 다운로드
Post Metadata를 JSON/CSV 파일에 저장하십시오
워터 마크 유무에 관계없이 미디어를 다운로드하고 ZIP 파일에 저장하십시오.
CLI에서 워터 마크없이 단일 비디오를 다운로드하십시오
URL에 서명하여 Tiktok API에 사용자 정의 요청을하십시오.
사용자, 해시 태그 및 단일 비디오 페이지에서 메타 데이터 추출
이전 진행 상황을 저장하고 이전에는 다운로드하지 않은 새 비디오 만 다운로드하십시오 . 이 기능은 CLI에서만 작동하며 다운로드 플래그가 켜져있는 경우에만 작동합니다.
CLI에서 이전에 다운로드 한 게시물 히스토리보기 및 관리
배치 모드에서 파일에 지정된 사용자, 해시 태그, 음악 피드 및 단일 비디오를 스크랩 및 다운로드
CLI : 동일한 비디오 다운로드를 피하기 위해 진행 상황을 저장하십시오
TypeScript의 모든 것을 다시 작성하십시오
프록시 지원을 향상시킵니다
테스트 추가
워터 마크없이 비디오를 다운로드하십시오
비디오가 다운로드되었는지 여부에 대한 출력 파일 (CSV/JSON)에 표시
Docker에서 빌드하고 실행하십시오
CLI : 스크랩 및 배치로 다운로드하십시오
CLI : 파일에서 프록시를로드합니다
CLI : 선택적 zip
API를 갱신하십시오
Webhook URL (CLI) 설정
음악 메타 데이터를 수집하는 새로운 방법을 추가하십시오
수동 페이지 매김을 추가하십시오
문서를 개선하십시오
오디오 파일을 다운로드하십시오
웹 인터페이스
테스트를 잊지 마십시오
원사 테스트
원사 빌드
Tiktok-Scraper는 Node.js v10+를 실행해야합니다.
NPM에서 설치하십시오
NPM I -G TIKTOK -SCRAPER
원사에서 설치하십시오
원사 글로벌 Tiktok-Scraper를 추가하십시오
$ tiktok-scraper-help 사용법 : Tiktok-Scraper <command> [옵션] 명령 : Tiktok-Scraper 사용자 [id] username에서 비디오를 스크랩합니다. 사용자 이름 만 입력하십시오 Tiktok-Scraper Hashtag [id] 해시 태그에서 비디오를 긁어냅니다. #없이 해시 태그를 입력하십시오. Tiktok-Scraper Trend는 현재 트렌드에서 게시물을 긁습니다 Tiktok-Scraper Music [id] 음악 ID 번호에서 스크랩 게시물 Tiktok-Scraper Video [id] 워터 마크없이 단일 비디오를 다운로드하십시오 Tiktok-Scraper History 이전 다운로드 기록보기 파일에서 tiktok-scraper [file] [async] scrape 사용자, 해시 태그, 음악, 비디오를 언급 한 비디오. 1 라인 당 1 값 옵션 : -Version Show 버전 번호 [부울] -세션 세션 세션 쿠키 값. 때로는 세션이 될 수 있습니다 모든 방법에서 데이터를 긁을 때 도움이됩니다 [기본값 : ""] -Session-File 활성 세션 목록이있는 파일의 경로. 하나 라인 당 세션! [기본: ""] -시간 초과 요청 간의 시간 초과. 시간 초과는 밀리 초입니다. 1000 mls = 1 s [기본값 : 0] -number, -n 게시물을 긁어냅니다. 0을 설정하면 모두를 설정하십시오 게시물이 긁히게됩니다 [기본값 : 0] -이 날짜 이전에 게시 된 게시물이 없습니다 (타임 스탬프). 0으로 설정하면 필터가 비활성화되어 있습니다 [기본값 : 0] -proxy, -p 세트 단일 프록시 [기본값 : ""] -Proxy-File 파일에서 프록시를 사용합니다. 스크레이퍼는 임의의 프록시를 사용합니다 각 요청 당 파일에서. 1 라인 1 프록시. [기본: ""] -download, -d 이름 입력이있는 폴더에 비디오 게시물 다운로드 [ID] [부울] [기본값 : False] -asyncdownload, -a 동시 다운로드 수 [기본값 : 5] -HD HD에서 비디오 다운로드. 비디오 크기는 x5-x10 배가 더 크며 스크레이퍼 실행 속도에 영향을 미칩니다. 이것 옵션은 -w 플래그와 함께 작동합니다 [부울] [기본값 : 거짓] -zip, -z zip 모든 다운로드 된 비디오 게시물 [boolean] [default : false] -filepath 파일 경로 모든 출력 파일을 저장합니다. [기본값 : "/users/karl.wint/documents/projects/javaScript/tiktok-scraper"] -fileType, -t 유형의 출력 파일 유형이 게시되는 출력 파일 저장. 'All' -모든 게시물에 대한 정보를 ''JSON '및'CSV '[선택 : "CSV", "JSON", "All", ""] [default : "" -filename, -f set 출력 파일에 대한 사용자 정의 파일 이름 [Default : "" -Nowatermark, -w Watermark없이 비디오를 다운로드합니다. 참고 : 최근 업데이트를 사용하면 해시 태그 피드를 폐기하는 경우이 옵션 만 사용하면됩니다. 사용자/트렌드/음악 피드에는 기본적으로 [boolean] [default : false] -스토어, -s 스크레이퍼가 OS TMP 또는 사용자 정의 폴더의 진행 상황을 저장하고 향후 사용법은 중복을 피하는 새로운 비디오 만 다운로드 할 것입니다. [boolean] [default : false] -HistoryPath 세트 히스토리 파일/파일이 저장되는 사용자 정의 경로 [기본값 : "/var/폴더/d5/fyh1_f2926q7c65g7skc0qh80000gn/t"] -remove, -r history record를 삭제합니다. "유형 : 입력"또는 "모두"모든 역사를 청소합니다. 예를 들면 : user : bob [default : ""] -webhookurl은 webhook URL을 HTTP 요청으로 스크레이퍼 결과를 수신하도록 설정합니다. 예를 들어 자신의 API [default : ""] -method post 또는 get request로 webhook URL에 데이터를 수신합니다 [선택 : "get", "post"] [default : "post"] -help show help [help [help show help [help [post "] BOOLEAN] 예 : TIKTOK -SCRAPER 사용자 사용자 이름 -D -N 100 -SESSION SID_TT = DAE32131231 TIKTOK -SCRAPER TREND -D -N 100 -SESSION SID_TT = DAE32131231 TIKTOK -SCRAPER HASHTAG HASHTAG_NAME -D-N 100 -SID_TT = DAE32131231 TIKTOK -SCRAPER MUSIC MUSIC MUSIC_ID -D -N 50 -SESSION SID_TT = DAE32131231 TIKTOK-SCRAPER 비디오 https://www.tiktok.com/@tiktok/video/6807491988882765062-DIKTOK-SCRAPE HISTORYSTIKTOK-SCRAPE : Bob Tiktok-Scraper History -r 모든 Tiktok-Scraper From File Batch_File Async_tasks -D
터미널 예제
다운로드 기록 관리
배치로 긁고 다운로드하십시오
Docker를 사용하면 -filepath 및 -historypath를 사용할 수는 없지만 -v를 사용하여 볼륨 ( 모든 파일이 저장되는 호스트 경로 )을 설정할 수 있습니다.
도커 빌드. -T TIKTOK-SCRAPER
예 1 : 히스토리 파일을 포함한 모든 파일은 Docker를 실행하는 디렉토리 ($ PWD)에 저장됩니다.
Docker Run -v $ (Pwd) :/usr/app/파일 Tiktok -Scraper 사용자 Tiktok -D -N 5 -S
예 2 : 기록 파일을 포함한 모든 파일은/사용자/blah/다운로드에 저장됩니다.
Docker Run -V/User/Blah/Downloads :/usr/앱/파일 Tiktok -Scraper 사용자 Tiktok -D -N 5 -S
.user (id, 옵션) // 특정 사용자 (약속)에서 게시물을 긁어 내기 (id, 옵션) // 해시 태그 섹션 (약속) .trend ( '', 옵션)에서 게시물을 긁어 내십시오. // 트렌드에서 스크랩 게시물 섹션 (Promise) .Music (ID, Options) // 음악 ID (Promise) 별 게시물 (약속) .userevent (id, 옵션) // 특정 사용자 (이벤트)에서 게시물을 긁어냅니다. hashtagevent (id, 옵션) // 스크랩 게시물 해시 태그 섹션 (event) .trendevent ( '', 옵션) // 트렌드 섹션 (이벤트). musicevent (id, 옵션)에서 게시물을 긁어내는 게시물을 스크랩 링 (event) .getUserProfileInfo ( '사용자 이름', 옵션 ) // 사용자 프로필 정보 가져 오기 .gethashtaginfo ( 'Hashtag', 옵션) // 해시 태그 정보 가져옵니다 .SignUrl ( 'url', 옵션) // request.getVideOmeta ( 'web_video_url', 옵션) // 비디오 가져 오기 watermark.getmusicinfo가없는 비디오 URL을 포함한 메타 정보 ( 'https://www.tiktok.com/music/original-sound-6801885499343571718', 옵션) // 음악 메타 데이터 얻기
const 옵션 = {// 스크랩 할 게시물 수 : {int default : 20} 번호 : 50, // 스크랩 게시물이 날짜 이후로 게시 됨 : {int default : 0} 이후 : 0, // 세션 : {String [] 기본값 : [ '']} // 인증 된 세션 쿠키 값은 사용자/트렌드/음악/해시 태그 피드를 긁어 내기 위해 필요합니다. // 여러 세션을 여기에 넣을 수 있습니다. 각 요청은 ListSessionList에서 랜덤 세션을 선택합니다 : [ 'sid_tt = ['sid_tt = 21312213 '], // set proxy {string [] | 문자열 기본값 : ''} // http 프록시 : 127.0.0.1:8080// 양말 프록시 : SOOKS5 : //127.0.0.1 : 8080 // 배열에서 프록시를 전달할 수 있으며 스크레이퍼는 배열에서 프록시를 무작위로 선택할 수 있습니다. requestsproxy : '', // user id : {boolean default : false} by_user_id : false, // 수를 비동기 적으로 다운로드해야합니다. {download : true} : {int default : 5} Asyncdownload : 5, // 비동기적으로 스크랩 해야하는 게시물 수 : {int default : 3} // 현재 옵션은 현재 유형으로 만 적용됩니다 : 음악 및 해시 태그/ / 다른 유형의 경우 Tiktok API에 대한 모든 요청 응답이 "MaxCursor"값을 제공하기 때문에 항상 1입니다. // 다음 requestAsyncscraping : 3, // 모든 파일이 저장 될 때 : {문자열 기본값 : 'current_dir'} filepath :`current_dir`, // 출력 파일의 사용자 정의 파일 이름 : {문자열 기본값 : ''} filename :`current_dir`, // 정보가 포함 된 // csv 또는 json 파일에 저장 될 수 있습니다. 문자열 기본값 : 'na'} // 'csv'csv // 'json'을 저장하려면 JSON // 'all'을 저장하여 JSON 및 CSV // 'NA'를 저장 하여이 stepFileType을 건너 뜁니다 :`na`, // 사용자 지정 헤더 설정 : 사용자 에이전트, 쿠키 등 // 참고 : 비디오 피드 또는 단일 비디오 메타 데이터를 구문 분석하면 그 대가로 정보를 추출하고 액세스하는 데 사용 된 {headers} 개체를 받게됩니다. 수신 된 {videourl} 값을 통해 비디오 다운로드 동일한 헤더 헤드를 사용해야합니다. }, // 워터 마크없이 비디오 다운로드 : {boolean default : false} // 워터 마크없이 다운로드하기 위해 true로 설정되어 있습니다. false} //이 옵션은 {nowatermark}가 {true}로 설정된 경우에만 작동합니다. // captcha로 차단 될 것입니다 // 자신의 verifyfp 값 또는 기본값 (하드 코드)을 설정할 수 있습니다. tiktok test endpoints.usetestendPoints를 사용하려면 : false};
예제 폴더를 확인하는 것을 잊지 마십시오
const tiktokscraper = require ( 'tiktok-scraper'); // 사용자 이름 별 사용자 피드 (async () => {try {const posts = await tiktokscraper.user ( 'username', {number : 100, sessionlist : [ 'sid_tt = 58ba9e3443174703d3c34e60d584475; ']}); console.log (posts);} catch (error) {console.log (error);}} () , 당신은 문자열로 사용자 ID를 전달해야합니다 (async () => {try {const posts = tiktokscraper.user (`user_id`, {user_id`, {number : 100, by_user_id : true, sessionList : [ 'sid_tt = 58ba9e3443174703d34e60d58475;']. }); console.log (posts);} catch (error) {console.log (error);}}) (); // 트렌드 피드 (async () => {try {const post = await tiktokscraper.trend '', {번호 : 100, 세션리스트 : [ 'sid_tt = 58ba9e3443174703d3d3c34e60d584475;']}); console.log (posts);} catch (error) {console.log (error);}}) (); // hashtag feed (async () => {try {const posts = tiktokscraper.hashtag ( 'hashtag', {number : 100, sessionlist : [ 'sid_tt = 58ba9e34431774703d3c34e60d584475;']; console.log (post);} (}); error) {console.log (error);}}) (); // 단일 사용자 프로필 정보 가져 오기 : 팔로어 수와 etcepput -username // 옵션 - 필요하지 않음 (async () => {const {const user = await tiktokscraper.getUserProfileInfo ( 'username', 옵션); console.log (user);} catch (error) {console.log (error);}}) (); // 단일 해시 태그 정보 얻기 : 뷰 수 및 etc // 입력 - 해시 태그 이름 // 옵션 - 필요하지 않습니다 (async () => {try {const hashtag = await tiktokscraper.gethashtaginfo ( 'hashtag', 옵션); console.log (hashtag);} catch (오류). {console.log (error);}}) (); // 단일 비디오 메타 데이터 가져 오기 // input -web_video_url // 예를 들어 : https://www.tiktok.com/@tiktok/video/680749198882765062// 옵션 - async () => {try {const videometa = tiktokscraper.getvideometa ( 'https://www.tiktok.com/@tiktok/video/6807491984882765062', 옵션); console.log (videota); (error) {console.log (error);}}) ();
const tiktokscraper = require ( 'tiktok-scraper'); const users = tiktokscraper.userevent ( "tiktok", {number : 30}); users.on ( 'data', json => {// json format}) ; user.on ( 'done', () => {//completed }) ;users.on ( 'error', error => {// 오류 메시지}); users.scrape (); const hashtag = tiktokscraper. hashtagevent ( "Summer", {번호 : 250, 프록시 : 'socks5 : //1.1.1.1 : 90'}); hashtag.on ( 'data', json => {// json format}); hashtag. on ( 'done', () => {//completed }); hashtag.on('error ', error => {// error message}); hashtag.scrape ();
필요하지 않습니다
매우 일반적인 문제는 Tiktok이 IP/Proxy를 블랙리스트에 올릴 때이며,이 경우 세션을 설정하려고 시도 할 수 있으며 성공 가능성이 높아집니다.
세션 받기 :
모든 브라우저에서 https://www.tiktok.com/을 엽니 다
계정에 로그인하십시오
마우스 오른쪽 버튼을 클릭하십시오 -> 검사관 -> 네트워킹
새로 고침 페이지 -> Tiktok에 작성된 요청을 선택하십시오 -> 요청 헤더 섹션 -> 쿠키로 이동
쿠키 SID_TT 값을 찾으십시오. 일반적으로 다음과 같습니다. SID_TT = 521KKADKASDASKDJ4J213J12J312;
SID_TT = 521KKADKASDASKDJ4J213J12J312; - 이것은 사용자/해시 태그/음악/트렌드 피드를 긁어내는 데 사용해야하는 인증 세션 쿠키 값입니다.
세션 설정 :
Cli :
예제 내용 /var/bob/sessionlist.txt :
옵션 -Session을 사용하여 단일 세션을 설정하십시오. 예를 들어 -session sid_tt = 521kkadkasdaskdj4j213j12j312;
옵션 -Session-File을 사용하여 세션 목록으로 파일로 경로를 설정하십시오. 예를 들어 -session-file /var/bob/sessionlist.txt
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
모듈 에서 옵션 값 세션리스트를 설정하여 세션을 설정할 수 있습니다. 예를 들어 SessionList : [ "SID_TT = 521KKADKASDASKDJ4J213J12J312;", "SID_TT = 12312312312312;"]
이 부분은 모듈 사용법 (CLI가 아님)과 관련이 있습니다.
{videourl} 값은 모든 값을 포함 할 수있는 쿠키 값 {tt_webid_v2} 에 binded됩니다.
사용자, 해시 태그, 음악, 트렌드 피드 또는 단일 비디오에서 비디오를 추출하면 비디오 메타 데이터 외에 응답하여 데이터를 추출하는 데 사용 된 매개 변수가 포함 된 헤더 객체를 받게됩니다. 다음은 {videourl} 값을 통해 비디오에 액세스/다운로드하려면 동일한 {headers} 값을 사용해야합니다 .
헤더 : { "사용자 에이전트": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebkit/537.36 (Gecko Like Gecko) Chrome/86.0.4240.80 Safari/537.36", "https : // www.tiktok.com/","cookie ":"tt_webid_v2 = 68985414108686123 "},
{옵션} 으로 자신의 헤더를 전달할 수 있습니다.
const Headers = { "user-agent": "bob", "referenter": "https://www.tiktok.com/","cookie": "tt_webid_v2 = bob"} getvideometa ( 'web_video_url', {headers} ) user ( 'web_video_url', {headers})) hashtag ( 'web_video_url', {headers}) trend ( 'web_video_url', {headers}) 음악 ( 'web_video_url', {headers}) // 동일한 사용자 정의 헤더를 사용하여 {videourl} 값
방법에 대한 예 : 사용자, 해시 태그, 트렌드, 음악, userevent, Hashtagevent, Musicevent, Trendevent
{헤더 : { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebkit/537.36 (Gecko Like Gecko와 같은 KHTML) Chrome/86.0.4240.80 Safari/537.36', 'HTTPS : // WWW .tiktok.com/', 쿠키 :'tt_webid_v2 = 68985414108686123 '}, 수집가 : [{id :'video_id ', 텍스트 :'캡션 ', createTime :'1583870600 ', authormeta : {id :'User Id ', name : '사용자 이름', 다음 : 195, 팬 : 43500, 심장 : '1093998', 비디오 : 3, digg : 95, 검증 : False, Private : Signature : 'User Bio', Avatar : 'Avatar_url'}, Musicmeta : {MusicId : '6808098113188120838', MusicName : 'Blah Blah', Musicauthor : 'Blah', Musicoriginal : True, Playurl : 'Sound/Music_url',}, Covers : {기본값 : 'Cover_URL', Origin : 'Cover_URL', Dynamic : 'cover_url'}, imageUrl : 'image_url', videourl : 'video_url', videoUrlNowaterMark : 'video_url_without_the_watermark', videometa : {width : 480, 높이 : 864, 비율 : 14, 지속 시간 : 14}, diggcount : 2104, Sharecount : Sharecount : 1, PlayCount : 9007, CommentCount : 50, 언급 : [ '@bob', '@sam', '@bob_again', '@and_sam_again'], 해시 태그 : [{id : '69573911', 이름 : 'PlaywithLife', 제목 : 'hashtag_title', cover : [array]} ...], downloaded : true} ...], // if {filetype} 및 {download} 옵션이 enbabled : zip : '/{current_path}/user_1552963581094 .zip ', json :'/{current_path }/user_1552963581094.json' ,csv : '/{current_path }/user_1552963581094.csv'}
{secuid : 'ms4wljabaaaav7isuuxdjgdvjkmh_vz1qkdzyo1apxgzaxdbseiupim', userid : '107955', issecret : false, itiqueid : 'tiktok', nickname : 'tiktok', signature : 'cover _', 'covers', [ '', ''covers ' '], 다음 : 490, 팬 : 38040567, 심장 :'211522962 ', 비디오 : 93, 확인 : true, digg : 29,}
{ChallendId : '4231', ChallendeName : 'Love', Text : '', Covers : [], CoversMedium : [], 게시물 : 66904972,보기 : '19457706433', IsCommerce : False, Splittitle : '}
{헤더 : { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebkit/537.36 (Gecko Like Gecko와 같은 KHTML) Chrome/86.0.4240.80 Safari/537.36', 'HTTPS : // WWW .tiktok.com/', 쿠키 :'tt_webid_v2 = 68985414108686123 '}, 컬렉터 : [{id :'680749198482765062 ', 텍스트 :'우리는 오늘 5pm pt에 #HappyAthome 라이브 스트림 시리즈를 시작하고 있습니다! ' 1584992742 ', Authormeta : {id :'6812221792183403526 ', 이름 :'blah '}, musicmeta : {musicId :'6822233276137213677 ', MusicName :'Blah ', Musicauthor :'Blah ','indimeurl : 'indimeurl :'indimeurl '},'Blah '}. video_url ', videourlnowatermark :'video_url_without_the_watermark ', videometa : {width : 480, 높이 : 864, 비율 : 14, 지속 시간 : 14}, 표지 : {default :'cover_url ','cover_url '}, diggcount : 49292, sharecount : 339, PlayCount : 614678, CommentCount : 4023, 다운로드 : False, Hashtags : [],}]}
{music : {id : '6882925279036665666', 제목 : 'doja x calabria', playurl : 'dfdfdfdf', coverthumb : 'dfdfdf', 'dfdfdf', 'dfdfdf', Coverlarge : 'fdfdf', authorname : 'Bryce', Original : true, playtoken : 'ffdfdf', keytoken : 'dfdfdfd', 'dfdfdfd', audiourlwithcookie : false, private : false : false : false : 46, 앨범 : '',}, 저자 : {id : '6835300004094166021', 'mashupsbybry', 'mashupsbybry', 'Bryce', avatarthumb : 'dfdfd', avatarmedium : 'dfdfdf', avatarlarger : 'dfdfdf', 'hi ily :) n70k soundcloud? z5jzexto0ozoybqiwwhwwwww5tag_im25lko94dm3k ', 비밀 : 거짓, ftc : 거짓, 관계 : 0, openfavorite : false, commentsting : 0, duetsetting : 0, stitchsetting : 0, privateAccount : false,}, 통계 : {videocount : 361700}, Sharemeta : {title :' Bryceyouloser | Doja x Calabria | Tiktok ', desc :'361.0k 비디오 - ♬ doja x calabria ',},}로 만든 멋진 짧은' + '비디오 시청;
특허
MIT
무료 소프트웨어