豆瓣电影top250下的评论爬取

编程入门 行业动态 更新时间:2024-10-14 10:38:55

<a href=https://www.elefans.com/category/jswz/34/1767641.html style=豆瓣电影top250下的评论爬取"/>

豆瓣电影top250下的评论爬取

    近日想要试试文本分类的小demo,需要有足够大量的好评差评数据,在研究了一些点评网站后,我选择了豆瓣电影top250豆瓣电影TOP250,这个网上的评价质量高,而且网页结构清晰明显,好爬取。美中不足的是每个电影的评价(好评以及差评)只能爬取各前200条,并且爬了太多(估计是访问100页左右)之后就封IP,一天后解封。后来换了手机提供的WLAN热点之后就再也没有封得掉我,不知道其中是什么原理?

    思路:

    1.需要爬取的页面连接特别好找,需要注意的是有的评论是繁体字,需要转换成简体字,我在这个博客找到了方法 Python 繁体中文与简体中文相互转换

    2.因为之后我直接对句子分词,因此在数据爬取的时候直接把标点符号去掉了,只留下汉字

    3.得到的评论数据提供下载豆瓣评论数据,有一些评论使用了颜文字,不过实在是有一些特殊符号去不掉了。数据共60856条,好评1(4-5星)差评0(1-2星)各一半左右。

预览:


    爬虫代码:(langconv请Python 繁体中文与简体中文相互转换中下载)

 
import urllib.request
import urllib.error
import re
import time
import langconvdef Traditional2Simplified(sentence):  # 将sentence中的繁体字转为简体字sentence = langconv.Converter('zh-hans').convert(sentence)return sentence# 清理一下评论数据
def clear(string):if '<p class="">' in string:string = string.replace(r'<p class="">', "")if "\n" in string:string = string.replace("\n", "")if " " in string:string = string.replace(" ", "")string = string.strip()  # 去掉空格等空白符号string = re.sub("[A-Za-z0-9]", "", string)  # 去掉英文字母 数字string = re.sub(r"[!!?。。,&;"★#$%&'()*《》+-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃「」『』【】"r"〔〕〖〗〘〙#〚〛〜〝〞/?=~〟,〰–—‘’‛“”„‟…‧﹏.]", "", string)  # 去掉中文符号string = re.sub(r"[!\'\"#。$%&()*+,-.←→/:~;<=>?@[\\]^_`_{|}~", "", string)  # 去掉英文符号return Traditional2Simplified(string).lower()  # 所有的英文都换成小写# 给一个电影的编号,输出这个电影的评论,好评差评各自200条
def print_movie(movie_num):for page in range(0, 10):for judge in ['h', 'l']:  # hl对应着好评/差评,中评忽略try:url = "/" + str(movie_num) + "/comments?start=" + str(page*20) + \"&limit=20&sort=new_score&status=P&percent_type=" + judge  # 导入总的网址,包括第几页html = urllib.request.urlopen(url).read().decode("utf-8", "ignore")  # 解码这个网页total_str = re.findall(r'allstar([\s\S]*?)</p>\n', html)  # 所有的用户评论数据,应该有20条for i in range(len(total_str)):comments = re.findall('<p class="">([\s\S]*?)\n', total_str[i])cleaned_comment = clear(comments[0])  # 清理一下这个评价if len(cleaned_comment) > 10:  # 太短的评价并不需要if total_str[i][0] == '1' or total_str[i][0] == '2':  # 第一个字就是评价的star数print("0 " + cleaned_comment)if total_str[i][0] == '4' or total_str[i][0] == '5':  # 并不包括中评print("1 " + cleaned_comment)time.sleep(1)except urllib.error.HTTPError or NameError or ConnectionAbortedError or IndexError as e:continue# 首先进入top250界面,查找i页的25个电影编号:
for page in range(1,11):url_250 = "=" + str(25*page) + "&filter="html_250 = urllib.request.urlopen(url_250).read().decode("utf-8", "ignore")  # 解码这个网页global total_num_strtotal_num_str = re.findall(r'/[\d]+/">', html_250)  # 所有的用户评论数据,应该有20条for i in range(len(total_num_str)):total_num_str[i] = re.sub("\D", "", total_num_str[i])for movie in total_num_str:print_movie(movie)

更多推荐

豆瓣电影top250下的评论爬取

本文发布于:2024-03-23 01:32:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738895.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:豆瓣   电影

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!