python 탄막 및 데이터 분석

불 행 히 도 코로나 때문에 오프라인 이 던 AWD 가 온라인 CTF 로 바 뀌 었 다.AWD 는 CTF 보다 어렵 기 때문에 사람과 싸 우 는 것 이 지금 은 주최 측 과 싸 우 는 것 이 되 었 다.
어 쩔 수 없 이 어 쩔 수 없 었 지만 이 제 는 다음 경 기 를 앞 두 고 정신 을 차 려 야 한다.이 시작 도 오프라인 이 었 고 결승전 장 소 는 난 징 이 었 으 며 그 후에 전염병 으로 인해 온라인 이 되 었 다.
물론 경기 내용 은 변 함 없 는 득 현학 이 고 내용 은 빅 데이터 에 관 한 것 이다.
우리 학 교 는 이전에 관련 교육 을 개설 한 적 이 없 기 때문에 스스로 생각해 볼 수 밖 에 없다.
자,쓸데없는 말 은 그만 하고 본문 부터 시작 합 시다.
경기 소개
빅 데 이 터 는 전체적으로 세 가지 과정 으로 나 뉜 다.
첫 번 째 과정 은 hadop 환경 을 구축 하 는 것 이다.
이것 은 처음에는 나 도 매우 어 리 석 었 지만,후에 강 좌 를 보고 대충 알 게 되 었 다.전체적으로 말 하면 hadop 은 집적 환경 으로 이 환경 에는 많은 소프트웨어 가 포함 되 어 있다.
이 소프트웨어 들 의 기능 은 각각 다르다.예 를 들 어 파일 분포 식(용서 하 세 요.저도 이름 을 잊 어 버 렸 습 니 다)은 컴퓨터 에 1 개의 g 크기 가 있다 고 가정 하 는 것 입 니 다.그러나 한 파일 에 10 개의 g 이 있다 면 이 시스템 으로 파일 을 10 부 로 나 누 어 각각 저장 할 수 있 습 니 다.
전반적 으로 빅 데 이 터 를 위 한 서비스 환경 이다.
두 번 째 과정 은 바로 데 이 터 를 얻 는 것 이다.
이것 은 경기 의 요구 에 따라 정 해진 것 이다.나 는 첫 경기 때 오픈 소스 의 전자상거래 사 이 트 를 기어 오 르 라 고 요 구 했 는데 이름 이 SHOPXO 인 것 같다.이 파충류 의 기초 가 있 는 학 우 는 가서 시험 해 볼 수 있다.
결승전 은 아직 비교 가 되 지 않 았 지만 동 영상의 탄막 을 오 르 려 는 것 같다.이것 은 단순히 동 영상 을 오 르 는 것 보다 좀 번 거 로 운 것 이다.왜냐하면 모든 사이트 가 탄막 에 대한 알고리즘 이 다 르 기 때문이다.
잠시 후에 나 는 파충류 두 개 를 써 서 각각 B 역 과 A 역 의 탄막 을 오 르 면 너희들 은 알 게 될 것 이다.
세 번 째 과정 은 바로 데 이 터 를 분석 하 는 것 이다.
그 건 솔직히 저도 잘 모 르 겠 어 요.이 단 계 를 분석 하면 사실 python 에서 할 수 있 지만 그 환경 에서 해 야 할 것 같 아 요...어 리 석 어서 여 기 는 자세히 쓰 지 않 겠 습 니 다.
이 글 을 쓰기 전에 나 는 awd 경기 에 관 한 것 도 한 편 쓴 적 이 있다.그러나 그 중 에 비교적 특수 한 것들 이 많이 관련 되 어 있어 서 당분간 밖으로 전해 질 수 없 기 때문에 나 는 먼저 은밀 한 것 으로 설정 했다.
빅 데이터 에 관 해 서 는 사실 나 는 너희들 과 마찬가지 로 신출내기 이다.단지 예전 에 일부 필요 로 파충류 에 대해 배 운 적 이 있 기 때문에 내 가 맡 은 것 은 두 번 째 내용 이다.이어서 나 도 파충류 와 데이터 분석 에 관 한 이 야 기 를 전편 으로 할 것 이다.
파충류
이것 은 빅 데이터 에서 매우 중요 한 것 이 라 고 할 수 있 습 니 다.앞에서 분석 을 아무리 잘 해도 데이터 가 없 으 면 분석 할 수 있 기 때 문 입 니 다.그래서 파충 류 를 잘 배 워 라.
파충 류 는 사실 일종 의 대명사 로 기능 이 비교적 특수 하기 때문에 이렇게 부른다.파충 류 를 배 운 적 이 없 기 전에 우리 가 정상적으로 어떻게 정 보 를 얻 었 는 지 생각해 보 자.예 를 들 어 우리 가 주걸륜 의 노래 리스트 가 어떤 지 알 고 싶 을 때.
첫 번 째 단 계 는 바 이 두 에 가서 주걸륜 을 검색 한 후에 우 리 는 qq 음악 과 같은 음악 사이트 에서 주걸륜 의 노래 리스트 를 볼 수 있 을 것 이다.파충류 도 그래 야 지.
그것 은 네가 상상 하 는 것 만큼 그렇게 신기 하지 않다.틀림없이 어떤 사이트 에서 조작 해 야 한다.
이어서 주걸륜 의 정 보 를 조금씩 기록 할 수 있다.우리 의 파충류 가 실현 되 는 것 도 이런 과정 이다.단지 1 초 에 한 페이지 만 방문 할 수 있 을 뿐,파충 류 는 1 초 에 몇 만 페이지 를 방문 할 수 있다.
자,파충류 에 관 한 더 자세 한 것 은 말 하지 않 겠 습 니 다.우 리 는 파충류 에 관 한 것 이 아 닙 니 다.csdn 에는 파충류 라 고 쓰 여 있 는 강좌 가 많 습 니 다.상세 합 니 다.
우리 의 주요 목적 은 실전 을 진행 하 는 것 이다.
사이트 탄막
원래 사이트 동 영상 정 보 를 제목 으로 하려 고 했 는데 그 건 정말 어렵 지 않 았 어 요.마침 경기 용 으로 탄막 을 얻 었 으 니 차라리 탄막 을 어떻게 오 르 는 지 얘 기해 보 세 요.
1.A 역
A 역 은 B 역 에 비해 좀 간단 하 다.우 리 는 먼저 웹 페이지 를 관찰한다.예 를 들 어 이것 은 내 가 마음대로 연 동 영상 이다.
현재 사이트 의 이러한 데 이 터 는 대부분 동태 적 이기 때문에 우 리 는 html 해상도 기로 웹 페이지 를 분석 할 수 없고 xhr 안의 데 이 터 를 직접 기어 올 라 가 야 한다.
F12 를 눌 러 서 가방 을 잡 으 세 요.그리고 우 리 는 검색 창 에서 우리 의 탄막 을 마음대로 검색 했다.
在这里插入图片描述
다행히 하나 밖 에 없어 요.우 리 는 이 검색 결 과 를 더 블 클릭 하여 관찰 했다.privew 를 누 르 면 이 안에 우리 의 모든 탄막 이 포함 되 어 있 음 을 발견 할 수 있 습 니 다.
在这里插入图片描述
그래서 이런 사 이 트 는 직접 오 르 면 된다.headers 를 누 르 면 매개 변수 와 요청 방식 을 관찰 합 니 다.
在这里插入图片描述
在这里插入图片描述
ok。이것들 을 얻 은 후에 대본 을 써 라.

import requests
url="https://www.acfun.cn/rest/pc-direct/new-danmaku/poll"
headers={
  "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36",
  "cookie":""
  #  ,cookie      。A     ,         cookie。
  }
data={
  "videoId":"15779946",
  "lastFetchTime":"0",
  "enableAdvanced":"true"
  }
html=requests.post(url,headers=headers,data=data)
html=html.json()
html=html["added"]
for i in html:
  print(i["body"])
효 과 는 그림 과 같다.
在这里插入图片描述
수량 을 세 어 보 니 마침 이 영상의 탄막 수 였 다.파일 을 쓰 는 기능 을 추가 하 는 등 자신의 물건 을 추가 할 수 있 습 니 다.
2.B 역
이 건 좀 특이 해.B 역 의 탄막 은 다른 알고리즘 이다.
B 역 은 탄막 을 한 홈 페이지 에 단독으로 벗 겨 내 고 동 영상 에 대응 하 는 cid 가 있어 야 탄막 에 대응 하 는 코드 를 얻 을 수 있 으 며 동 영상의 탄막 정 보 를 얻 을 수 있다.예 를 들 어:[삐 리 삐 리 2019 세배 제]
우선,우 리 는 동 영상의 동 영상 번 호 를 얻 으 려 면 예전 에는 av 번 이 었 고 지금 은 bv 번 이 었 다.
在这里插入图片描述
그리고 이 링크 에 bv 번 호 를 추가 하 세 요.이것 은 삐걱삐걱 하 는 api 로 cid 를 얻 을 수 있 습 니 다.
https://api.bilibili.com/x/player/pagelist?bvid=BV17t411y7R1&jsonp=jsonp
연결 중인 bvid 를 bv 번호 로 바 꿉 니 다.
그림 에서 우 리 는 동 영상 에 4 개의 cid 가 있 는 것 을 발견 했다.
在这里插入图片描述
이어서 우 리 는 다음 api 를 사용 하면 탄막 을 얻 을 수 있다.
https://comment.bilibili.com/76457841.xml
뒤의 숫자 를 방금 찾 은 cid 로 바 꿉 니 다.
결 과 는 그림 과 같다.
在这里插入图片描述
좋아.이것 이 바로 우리 가 수 동 으로 탄막 을 얻 는 절차 이 고,다음은 파충류 로 만 들 면 된다.
첫 번 째 단 계 는 bv 를 av 번호 로 바 꿉 니 다.사실 너 는 직접 bv 번 호 를 사용 할 수 있 지만,내 가 이 게시 물 을 만 들 기 전에 av 번 으로 찾 았 기 때문에 이렇게 한 걸음 더 했다.
이 단 계 는 바로 인터넷 에서 도 구 를 찾 으 면 됩 니 다.많 으 면 코드 에 추가 하지 않 습 니 다.
2 부,방금 준 두 번 째 api 로 cid 를 획득 합 니 다.우 리 는 파충 류 를 사용 하면 인터넷 주 소 를 규정된 격식 으로 만 들 수 있다.
https://www.bilibili.com/widget/getPageList?aid=?
물음표
세 번 째,기어 라.우리 가 마지막 으로 돌아 온 것 은 xml 파일 을 볼 수 있 기 때문에 파충류 안의 xml 해상도 기 를 이용 하여 분석 하면 된다.
다른 것 은 쓸데없는 소리 하지 말고 바로 코드 를 올 려 라.못 알 아 본 댓 글 이 있 으 면 물 어 봐.

import requests
from bs4 import BeautifulSoup
import lxml

aid=input("   av :   bv     av 
") file_name=input(" :
") f=open(file_name,"a",encoding='utf-8') headers={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36" } get_cid="https://www.bilibili.com/widget/getPageList?aid="+aid cid_list=eval(requests.get(get_cid).text) for cid in cid_list: cid=cid["cid"] xml="https://comment.bilibili.com/"+str(cid)+".xml" html=requests.get(xml,headers=headers) html.encoding=html.apparent_encoding soup=BeautifulSoup(html.text,"xml").find_all("d") for dm in soup: f.write(dm.text+"
") f.close()
이것 은 후속 분석 을 편리 하 게 하기 위해 탄막 파일 을 직접 로 컬 에 저장 한 것 이다.결 과 는 그림 과 같다.
在这里插入图片描述
모두 9 만 여 개의 탄막 이다.
됐어,나머지 는 쓰기 귀찮아.
데이터 분석
분석 을 하려 면 사실 이것 은 매우 넓 기 때문에 특정한 요구 에 따라 해 야 한다.
먼저 첫 번 째,고주파 어 통 계 를 말 해 보 세 요.
코드 는 제 가 복사 한 것 입 니 다.간단 하지만 사용 하기 쉽 습 니 다.
(이전 파일 을 스 크 립 트 와 같은 디 렉 터 리 아래 에 놓 습 니 다)

import jieba.analyse
f =open(r'bilibil   .txt',encoding='utf-8')#    
text=f.read() #    
text_list=jieba.analyse.extract_tags(text,topK=40)#  jieba  ,          40  
text_list=",".join(text_list)#             
print(text_list)
그림 과 같이 글자 수가 가장 많은 단어 40 개가 집계 됐다.
在这里插入图片描述
기계 인식 이 라 부정 확 할 수 밖 에 없 으 니 이상 하 게 나타 나 는 것 에 신경 쓰 지 마라.
두 번 째,감정 분석.이것 은 내 가 추측 해서 사용 할 수 있 는 물건 이다.
우 리 는 이것 을 우리 가 쓴 것 보다 직접 baiduAPI 로 할 수 있다.이 api 는 모든 데 이 터 를 감정 적 으로 예측 하고 적 극 적 이거 나 소 극적인 확률 로 되 돌려 줍 니 다.
하지만 바 이 두 api 계 정 을 먼저 신청 해 야 합 니 다.이것 은 말 하지 않 겠 습 니 다.바 이 두 는 튜 토리 얼 이 있 습 니 다.
코드 도 내 가 복사 한 거 야.먼저 원작 자 님 께 감 사 드 립 니 다.정말 잘 썼 습 니 다.
(원래 두 개의 스 크 립 트 를 원 했 는데 개선 해서 하나의 스 크 립 트 로 썼 습 니 다.이 스 크 립 트 는 두 단어 만 테스트 했 습 니 다.파일 을 분석 하려 면 조금 만 바 꾸 면 됩 니 다.)

import re
import requests
import json

#  text  lenth         
def cut_text(text, lenth):
  textArr = re.findall('.{' + str(lenth) + '}', text)
  textArr.append(text[(len(textArr) * lenth):])
  return textArr #      

def get_emotion(access_token,data): #     
  #     API     token  URL 
  token = access_token 
  url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?charset=UTF-8&access_token={}'.format(token)

  #       API    2048  ,           2048,     
  if (len(data.encode()) < 2048):
    new_each = {
      'text': data #           new_each ,data      string
    }
    new_each = json.dumps(new_each)
    res = requests.post(url, data=new_each) #   URL        API
    # print("content: ", res.content)
    res_text = res.text #          , string    
    result = res_text.find('items') #            items   
    positive = 1
    if (result != -1): #        -1,     items   
      json_data = json.loads(res.text)
      negative = (json_data['items'][0]['negative_prob']) #        
      positive = (json_data['items'][0]['positive_prob']) #        
      print("positive:",positive)
      print("negative:",negative)
      # print(positive)
      if (positive > negative): #         ,   2
        return 2
      elif (positive == negative): #         ,   1
        return 1
      else:
        return 0 #   ,  0
    else:
      return 1
  else:
    data = cut_text(data, 1500) #           1500,   
    # print(data)
    sum_positive = 0.0 #          
    sum_negative = 0.0 #          
    for each in data: #        
      # print(each)
      new_each = {
        'text': each #           new_each 
      }
      new_each = json.dumps(new_each)
      res = requests.post(url, data=new_each) #   URL        API
      # print("content: ", res.content)
      res_text = res.text #          , string    
      result = res_text.find('items') #            items   
      if (result != -1):
        json_data = json.loads(res.text) #        -1,     items   
        positive = (json_data['items'][0]['positive_prob']) #        
        negative = (json_data['items'][0]['negative_prob']) #        
        sum_positive = sum_positive + positive #        
        sum_negative = sum_negative + negative #        
        # print(positive)
    print(sum_positive)
    print(sum_negative)
    if (sum_positive > sum_negative): #         ,   2
      return 2
    elif (sum_positive == sum_negative): #          ,   1
      return 1
    else:
      return 0 #   ,  0

def main():
  # client_id       API Key, client_secret       Secret Key
  #         ,         。
  client_id=""
  client_secret=""
  host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+client_id+'&client_secret='+client_secret
  response = requests.get(host)
  list_new=eval(response.text)
  access_token=list_new["access_token"]
  txt1 = "    "
  txt2 = "  !"
  print("txt1    :",get_emotion(access_token,txt1))
  print("txt2    :",get_emotion(access_token,txt2))

if __name__ == "__main__":
  main()
효 과 는 그림 과 같다.
在这里插入图片描述
나머지 는 접 는 그림 같은 것 은 쓰 지 않 고 바 이 두 에 다 있다.
python 의 탄막 기어 오 르 기와 데이터 분석 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python python 탄막 기어 오 르 기 데이터 분석 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기