python爬虫爬取豆瓣影评_python爬虫实战:豆瓣模拟登录 + 影评爬取 + 词云制作

本文介绍了如何使用Python通过模拟登陆豆瓣获取关于电影《哪吒之魔童降世》的短评,并利用BeautifulSoup解析HTML,进行分词处理后制作词云,展示了数据爬取、HTML解析及文本分析的基本应用。
摘要由CSDN通过智能技术生成

项目描述

爬取豆瓣上关于《哪吒之魔童降世》的短评,并制作词云。

技术点:

Python面向对象

模拟登陆,内容爬取

HTML解析利器:BeautifulSoup (对应Java中的JSoup)

分词,并制作词云

学完后能做什么:爬取网络中任何感兴趣的东西,如小说、图片、音乐、电影。或者其他有价值的数据,如收集电商商品信息,做一个比较网站。

环境准备

安装Python3.x,官网下载安装包;

安装本次项目中使用的第三方包

pip install requests

pip install beautifulsoup4

pip install PIL

pip install pandas

pip install numpy

pip install jieba

pip install wordcloud

第三方包介绍

requests:抓取url数据

beautifulsoup4:html解析,从网页获取有用的数据

PIL:图片展示

pandas:数据处理,并保存到表格

numpy:数据处理,矩阵操作

jieba:分词

wordcloud:制作词云

豆瓣模拟登录

为什么需要模拟登陆?

有些网站不登录的话,访问会受限。例如,在未登录情况下,豆瓣影评只能读取200条。

模拟登陆流程:

进入登录页面;

打开Chrome Debug控制台(右键页面,选择“检测”;或者使用“F12”快捷键);

进行登录操作;

在Chrome Debug控制台抓取登录消息

{

'ck': '',

'name': "你的豆瓣登录账号",

'password': "你的豆瓣登录密码",

'remember': 'false',

'ticket': ''

}

登录参考代码:

import requests

class DouBan:

def __init__(self):

self.login_url = 'https://accounts.douban.com/j/mobile/login/basic'

self.headers = {

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"

}

self.login_data = {

'ck': '',

'name': "你的豆瓣登录账号",

'password': "你的豆瓣登录密码",

'remember': 'false',

'ticket': ''

}

self.session = requests.Session()

self.login()

def login(self):

response = self.session.post(self.login_url, data=self.login_data, headers=self.headers)

print(response.json())

def get_html(self, url):

return self.session.get(url, headers = self.headers)

影评爬取

在豆瓣查找《哪吒之魔童降世》影评 链接

分析短评页面,确定抓取维度:

用户名

('.comment-info a')[0].text

评星

('.rating')[0]['class'][0][7:8]

评论内容

('.short')[0].text

时间

('.comment-time')[0].text

from nezha.douban2 import DouBan

import time

import random

from bs4 import BeautifulSoup

import pandas as pd

import jieba

from wordcloud import WordCloud

import numpy as np

from PIL import Image

class nezha2:

def __init__(self):

self.comment_url = 'https://movie.douban.com/subject/26794435/comments?start=%d&limit=20&sort=new_score&status=P'

self.comment_count = 500

self.douban = DouBan()

def get_comments(self):

comments = {'users': [], 'ratings': [], 'shorts': [], 'times': []}

for i in range(0, 500, 20):

time.sleep(random.random())

url = self.comment_url % i

response = self.douban.get_html(url)

print('进度', i, '条', '状态是:', response.status_code)

soup = BeautifulSoup(response.text)

for comment in soup.select('.comment-item'):

try:

user = comment.select('.comment-info a')[0].text

rating = comment.select('.rating')[0]['class'][0][7:8]

short = comment.select('.short')[0].text

t = comment.select('.comment-time')[0].text.strip()

# print(user, rating, short, t)

except:

continue

else:

comments['users'].append(user)

comments['ratings'].append(rating)

comments['shorts'].append(short)

comments['times'].append(t)

# break

comments_pd = pd.DataFrame(comments)

# 保存完整短评信息

comments_pd.to_csv('comments.csv')

# 仅保存评论,作为后续分词的数据源

comments_pd['shorts'].to_csv('shorts.csv', index=False)

分词

使用jieba分词,注意要过滤掉无意义的词语,否则会出现大量的“我,是,一”等词语。

def word_cut(self):

# 添加新词

with open('data/mywords.txt') as f:

jieba.load_userdict(f)

# 获取短评数据

with open('shorts.csv', 'r', encoding='utf8') as f:

comments = f.read()

with open('data/stop.txt') as f:

stop_words = f.read().splitlines()

words = []

# 过滤无意义的词语

for word in jieba.cut(comments):

if word not in stop_words:

words.append(word)

words = ' '.join(words)

return words

词云

使用wordcloud产生词云

def generate_wordcount(self):

word_cloud = WordCloud(

background_color='white',

font_path='/System/Library/Fonts/PingFang.ttc', # 显示中文

mask=np.array(Image.open('data/nezha.jpg')),

max_font_size=100

)

word_cloud.generate(self.word_cut())

word_cloud.to_image().show()

word_cloud.to_file('word.jpg')

词云效果

1507686-20200402111502104-70642733.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>