1. 소개
이 기사의 텍스트와 그림은 인터넷에서 가져온 것으로 학습 및 커뮤니케이션 목적으로 만 사용되며 상업적으로 사용되지 않습니다. 문의 사항이있는 경우 처리를 위해 당사에 문의하십시오.
추신 : Python 학습 자료가 필요한 경우 아래 링크를 클릭하여 직접 얻을 수 있습니다.
Python 무료 학습 자료, 코드 및 교환 답변 클릭하여 가입
오늘은 여러 인기 데이터 (평점, 기간, 장르)와 관련 네티즌 댓글 및 "설날"에 발표 된 기타 데이터를 크롤링합니다.
등급, 기간 및 유형의 차트 시각화
다른 단어 구름 패턴을 사용하여 7 개의 영화 "리뷰"의 단어 구름을 보여주세요! ! ! !
2. 데이터 수집
1. 채점 데이터
웹 분석
웹 페이지의 소스 코드를 보면 타겟 데이터가 <ul class = "lists"> 태그에 있음을 알 수 있으며, 이는 xpath 분석을 통해 얻을 수 있습니다. 아래 코드에 직접!
프로그래밍 실현
headers = {
'Host':'movie.douban.com',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36',
'cookie':'bid=uVCOdCZRTrM; douban-fav-remind=1; __utmz=30149280.1603808051.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __gads=ID=7ca757265e2366c5-22ded2176ac40059:T=1603808052:RT=1603808052:S=ALNI_MYZsGZJ8XXb1oU4zxzpMzGdK61LFA; dbcl2="165593539:LvLaPIrgug0"; push_doumail_num=0; push_noty_num=0; __utmv=30149280.16559; ll="118288"; __yadk_uid=DnUc7ftXIqYlQ8RY6pYmLuNPqYp5SFzc; _vwo_uuid_v2=D7ED984782737D7813CC0049180E68C43|1b36a9232bbbe34ac958167d5bdb9a27; ct=y; ck=ZbYm; __utmc=30149280; __utmc=223695111; __utma=30149280.1867171825.1603588354.1613363321.1613372112.11; __utmt=1; __utmb=30149280.2.10.1613372112; ap_v=0,6.0; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1613372123%2C%22https%3A%2F%2Fwww.douban.com%2Fmisc%2Fsorry%3Foriginal-url%3Dhttps%253A%252F%252Fmovie.douban.com%252Fsubject%252F34841067%252F%253Ffrom%253Dplaying_poster%22%5D; _pk_ses.100001.4cf6=*; __utma=223695111.788421403.1612839506.1613363340.1613372123.9; __utmb=223695111.0.10.1613372123; __utmz=223695111.1613372123.9.4.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/misc/sorry; _pk_id.100001.4cf6=e2e8bde436a03ad7.1612839506.9.1613372127.1613363387.',
}
url="https://movie.douban.com/cinema/nowplaying/zhanjiang/"
r = requests.get(url,headers=headers)
r.encoding = 'utf8'
s = (r.content)
selector = etree.HTML(s)
li_list = selector.xpath('//*[@id="nowplaying"]/div[2]/ul/li')
dict = {}
for item in li_list:
name = item.xpath('.//*[@class="stitle"]/a/@title')[0].replace(" ","").replace("\n","")
rate = item.xpath('.//*[@class="subject-rate"]/text()')[0].replace(" ", "").replace("\n", "")
dict[name] = float(rate)
print("电影="+name)
print("评分="+rate)
print("-------")
영화 이름과 등급 데이터는 아래로 크롤링되고 내림차순으로 정렬되어 나중에 시각화됩니다.
2. 영화의 길이와 종류
웹 분석
페이지 소스 코드에서 영화 길이에 대한 웹 페이지 태그는 ropety = "v : runtime"이고 영화 유형에 대한 웹 페이지 태그는 property = "v : genre"에 해당합니다.
프로그래밍 실현
###时长
def getmovietime():
url = "https://movie.douban.com/cinema/nowplaying/zhanjiang/"
r = requests.get(url, headers=headers)
r.encoding = 'utf8'
s = (r.content)
selector = etree.HTML(s)
li_list = selector.xpath('//*[@id="nowplaying"]/div[2]/ul/li')
for item in li_list:
title = item.xpath('.//*[@class="stitle"]/a/@title')[0].replace(" ", "").replace("\n", "")
href = item.xpath('.//*[@class="stitle"]/a/@href')[0].replace(" ", "").replace("\n", "")
r = requests.get(href, headers=headers)
r.encoding = 'utf8'
s = (r.content)
selector = etree.HTML(s)
times = selector.xpath('//*[@property="v:runtime"]/text()')
type = selector.xpath('//*[@property="v:genre"]/text()')
print(title)
print(times)
print(type)
print("-------")
3. 코멘트 데이터
웹 분석
웹 페이지 코드를 확인하세요. 댓글 데이터의 대상 태그 는 <div class = "mod-bd"id = "comments">입니다 (분석 방법을 모르면 이전 기사를 읽을 수 있습니다. [python crawls 44130 user view data, 분석 및 채굴 사용자와 영화 사이의 숨겨진 정보!],이 기사는 또한 자세한 소개가있는 Douban 영화에 대한 분석입니다).
이 7 편의 영화 댓글 데이터 크롤링을 시작합시다! ! ! !
프로그래밍 실현
###评论数据
def getmoviecomment():
url = "https://movie.douban.com/cinema/nowplaying/zhanjiang/"
r = requests.get(url, headers=headers)
r.encoding = 'utf8'
s = (r.content)
selector = etree.HTML(s)
li_list = selector.xpath('//*[@id="nowplaying"]/div[2]/ul/li')
for item in li_list:
title = item.xpath('.//*[@class="stitle"]/a/@title')[0].replace(" ", "").replace("\n", "")
href = item.xpath('.//*[@class="stitle"]/a/@href')[0].replace(" ", "").replace("\n", "").replace("/?from=playing_poster", "")
print("电影=" + title)
print("链接=" + href)
###
with open(title+".txt","a+",encoding='utf-8') as f:
for k in range(0,200,20):
url = href+"/comments?start="+str(k)+"&limit=20&status=P&sort=new_score"
r = requests.get(url, headers=headers)
r.encoding = 'utf8'
s = (r.content)
selector = etree.HTML(s)
li_list = selector.xpath('//*[@class="comment-item "]')
for items in li_list:
text = items.xpath('.//*[@class="short"]/text()')[0]
f.write(str(text)+"\n")
print("-------")
time.sleep(4)
이러한 주석 데이터를 텍스트 파일에 저장 한 다음 이러한 주석 데이터를 시각적으로 표시하기 위해 다른 그래픽을 사용하십시오! ! ! !
3. 데이터 시각화
1. 스코어링 데이터 시각화
###画图
font_size = 10 # 字体大小
fig_size = (13, 10) # 图表大小
data = ([datas])
# 更新字体大小
mpl.rcParams['font.size'] = font_size
# 更新图表大小
mpl.rcParams['figure.figsize'] = fig_size
# 设置柱形图宽度
bar_width = 0.35
index = np.arange(len(data[0]))
# 绘制评分
rects1 = plt.bar(index, data[0], bar_width, color='#0072BC')
# X轴标题
plt.xticks(index + bar_width, itemNames)
# Y轴范围
plt.ylim(ymax=10, ymin=0)
# 图表标题
plt.title(u'豆瓣评分')
# 图例显示在图表下方
plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.03), fancybox=True, ncol=5)
# 添加数据标签
def add_labels(rects):
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2, height, height, ha='center', va='bottom')
# 柱形图边缘用白色填充,纯粹为了美观
rect.set_edgecolor('white')
add_labels(rects1)
# 图表输出到本地
plt.savefig('豆瓣评分.png')
분석
7 개 히트 곡 중 '안녕, 이화영'이 가장 높은 평점 (8.3), '탐정 차이나 타운 3'이 가장 낮은 평점 (5.8)
2. 기간 및 유형 시각화
기간 데이터 시각화
#####时长可视化
itemNames.reverse()
datas.reverse()
# 绘图。
fig, ax = plt.subplots()
b = ax.barh(range(len(itemNames)), datas, color='#6699CC')
# 为横向水平的柱图右侧添加数据标签。
for rect in b:
w = rect.get_width()
ax.text(w, rect.get_y() + rect.get_height() / 2, '%d' %
int(w), ha='left', va='center')
# 设置Y轴纵坐标上的刻度线标签。
ax.set_yticks(range(len(itemNames)))
ax.set_yticklabels(itemNames)
plt.title('电影时长(分钟)', loc='center', fontsize='15',
fontweight='bold', color='red')
#plt.show()
plt.savefig("电影时长(分钟)")
분석
1. 사진 속 영화
의 길이 는 약 120 분입니다 . 2. 가장 긴 영화 "탐정 차이나 타운 3"(136 분), 가장 짧은 영화는 "곰에 감염된 야생 대륙"(99 분)
영화 유형 데이터 시각화
#####2.类型可视化
###从小到大排序
dict = sorted(dict.items(), key=lambda kv: (kv[1], kv[0]))
print(dict)
itemNames = []
datas = []
for i in range(len(dict) - 1, -1, -1):
itemNames.append(dict[i][0])
datas.append(dict[i][1])
x = range(len(itemNames))
plt.plot(x, datas, marker='o', mec='r', mfc='w', label=u'电影类型')
plt.legend() # 让图例生效
plt.xticks(x, itemNames, rotation=45)
plt.margins(0)
plt.subplots_adjust(bottom=0.15)
plt.xlabel(u"类型") # X轴标签
plt.ylabel("数量") # Y轴标签
plt.title("电影类型统计") # 标题
plt.savefig("电影类型统计.png")
분석
이 7 개의 영화의 유형을 세십시오 (일부 영화는 '액션', '판타지', '어드벤처'와 같은 여러 유형에 속함).
1. 7 개의 영화 중 4 개는 코미디입니다.
2. SF, 범죄, 서스펜스, 모험은 모두 한 부분에 속합니다.
3. 코멘트 데이터의 워드 클라우드 시각화
단어 구름 시각화에 7 가지 다른 패턴을 사용하므로 그리기 코드를 함수로 캡슐화하십시오! ! !
####词云代码
def jieba_cloud(file_name, icon):
with open(file_name, 'r', encoding='utf8') as f:
text = f.read()
text = text.replace('\n',"").replace("\u3000","").replace(",","").replace("。","")
word_list = jieba.cut(text)
result = " ".join(word_list) # 分词用 隔开
# 制作中文云词
icon_name = ""
if icon == "1":
icon_name ='fas fa-envira'
elif icon == "2":
icon_name = 'fas fa-dragon'
elif icon == "3":
icon_name = 'fas fa-dog'
elif icon == "4":
icon_name = 'fas fa-cat'
elif icon == "5":
icon_name = 'fas fa-dove'
elif icon == "6":
icon_name = 'fab fa-qq'
elif icon == "7":
icon_name = 'fas fa-cannabis'
"""
# icon_name='',#国旗
# icon_name='fas fa-dragon',#翼龙
icon_name='fas fa-dog',#狗
# icon_name='fas fa-cat',#猫
# icon_name='fas fa-dove',#鸽子
# icon_name='fab fa-qq',#qq
"""
picp = file_name.split('.')[0] + '.png'
if icon_name is not None and len(icon_name) > 0:
gen_stylecloud(text=result, icon_name=icon_name, font_path='simsun.ttc', output_name=picp) # 必须加中文字体,否则格式错误
else:
gen_stylecloud(text=result, font_path='simsun.ttc', output_name=picp) # 必须加中文字体,否则格式错误
return picp
이 7 개의 영화에 대한 리뷰 데이터 플로팅 시작
###评论数据词云
def commentanalysis():
lists = ['刺杀小说家','你好,李焕英','人潮汹涌','侍神令','唐人街探案3','新神榜:哪吒重生','熊出没·狂野大陆']
for i in range(0,len(lists)):
title =lists[i]+".txt"
jieba_cloud(title , (i+1))
분석
말도 안 돼요. "워드 클라우드 쇼"를 시작합시다! ! ! ! ! ! !
1. 소설가 암살
2. 군중
3. 곰에 감염된 야생 대륙
4. 새로운 신 목록 : Nezha Rebirth
5. 탐정 차이나 타운 3
6. 안녕하세요, Li Huanying
7. 사무라이의 단서
4. 요약
1. Douban "설날"에 개봉 된 영화의 데이터 (평점, 길이, 장르, 댓글)를 크롤링합니다
. 2. 차트로 등급, 기간 및 장르를 시각화합니다.
3. 다른 단어 구름 패턴을 사용하여 단어 구름을 "검토"합니다. 세븐 무비 쇼! ! ! !