龙空技术网

Python爬虫简单实例——豆瓣电影评论数据的爬取

Python进阶者 159

前言:

眼前咱们对“ajax评论代码”大约比较关注,大家都想要学习一些“ajax评论代码”的相关知识。那么小编也在网上收集了一些对于“ajax评论代码””的相关内容,希望小伙伴们能喜欢,各位老铁们一起来了解一下吧!

一、 前言

豆瓣网是一家基于用户对于图书、电影和音乐兴趣而搭建的社交网站,由杨勃创立于2005年。豆瓣网推崇算法,根据用户对音乐、书、电影等进行的操作,自动给出同类趣味和友邻推荐。基于记录和分享而生成的“用户价值”是豆瓣的核心竞争力。豆瓣网的一大特色是不做运营,用户自发组建的小组是豆瓣特有的文化和社区产物。

爬取豆瓣网上面的电影评论数据具有很重要的作用。电影评论数据是NLP(自然语言处理)重要的数据。通过电影评论数据集可以进一步做中文分词、命名实体识别、关键词提取、句法分析、文本向量化、情感分析、舆情分析等进一步的数据处理和应用。既然数据这么重要,废话不多说,紧接着就开始电影数据的爬取。

二、 代码及结果分析展示

这次选取的实例电影是《我不是药神》:它是由文牧野执导,宁浩、徐峥共同监制的剧情片,徐峥、周一围、王传君、谭卓、章宇、杨新鸣等主演 。该片于2018年7月5日在中国上映。影片讲述了神油店老板程勇从一个交不起房租的男性保健品商贩,一跃成为印度仿制药“格列宁”独家代理商的故事,这里先放一张海报。

紧接着查看《我不是药神》的豆瓣评论。还是老样子F12—>NetWork—>XHR,我们发现这里面竟然没有xhr文件,谢天谢地,这说明这些评论数据都不是通过Ajax来传送数据的。这样工作就简单太多了---------直接通过寻找URL的规律爬取每页的数据并保存。

那就直接来吧:

?start=20&limit=20&sort=new_score&status=P

*20&limit=20&sort=new_score&status=P

这样规律就找到了,只需要通过一个变量改变start的值就可以。

接下来直接给出代码:

# -*-coding:utf-8-*-

import urllib.request

from bs4 import BeautifulSoup

import random

import time

import jieba

import wordcloud

def getHtml(url):

"""获取url页面"""

user_agents = [

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',

'Opera/8.0 (Windows NT 5.1; U; en)',

'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',

'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50',

'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',

'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10',

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 ',

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',

'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',

'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',

'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11',

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',

'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',

'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',

'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) ',

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",

"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",

"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",

"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",

"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",

"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",

"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",

"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52"

]

headers = {

'Cookie': 你的cookie,

'User-Agent': str(random.choice(user_agents)),

'Referer': 'https: // movie.douban.com / subject / 26752088 / comments?status = P',

'Connection': 'keep-alive'

}

req = urllib.request.Request(url,headers=headers)

req = urllib.request.urlopen(req)

content = req.read().decode('utf-8')

return content

def getComment(url):

"""解析HTML页面"""

html = getHtml(url)

soupComment = BeautifulSoup(html, 'html.parser')

comments = soupComment.findAll('span', 'short')

onePageComments = []

for comment in comments:

# print(comment.getText()+'\n')

onePageComments.append(comment.getText()+'\n')

return onePageComments

def wordAnalysis():

f = open('

C:/Users/Administrator/PycharmProjects/practice1/我不是药神.txt','r',encoding = 'utf-8')

content = f.read()

f.close()

ls = jieba.lcut(content)

txt = ' '.join(ls)

w = wordcloud.WordCloud(font_path='c:\windows\Fonts\STZHONGS.TTF', width=1000, height=700, background_color='white')

w.generate(txt)

w.to_file('Movie.png')

if __name__ == '__main__':

f = open('我不是药神.txt', 'a', encoding='utf-8')

j = 0

for page in range(15): # 豆瓣爬取多页评论需要验证。

url = '; + str(20*page) + '&limit=20&sort=new_score&status=P'

print('第%s页的评论:' % (page))

print(url + '\n')

for i in getComment(url):

f.write(str(j))

f.write(i)

print(j,i)

j += 1

time.sleep(10)

print('\n')

wordAnalysis()

词云结果如下图所示:

在代码里面本文设置了UserAgent池来防止反爬虫,其中需要重点强调的是:注意啦、注意啦、注意啦,注意啦、注意啦、注意啦:

如果在运行代码时遇到这样一个问题:

不要着急,以上问题可能有两种可能:

1) 你可能遭遇反爬虫:

原因如下:

如果用 urllib.request.urlopen 方式打开一个URL,服务器端只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息,而缺失这些信息的请求往往都是非正常的访问,例如爬虫.

有些网站验证请求信息中的UserAgent(它的信息包括硬件平台、系统软件、应用软件和用户个人偏好),如果UserAgent存在异常或者是不存在,那么这次请求将会被拒绝(如上错误信息所示)(当然现在很多网站的反爬虫不单单是通过UserAgent进行验证非正常访问,还会通过cookie、爬虫频率等很多方法去判断验证)

解决办法:

可以通过建立User-Agent池和IP池来伪装自己。

2)你没有登录

有些网站必须是注册、登录,然后获取cookie。进而爬取。豆瓣网就是一个很典型的例子,在没有登录的时候,是可以10页的评论数据。一旦超过10页,并且检测到用户没有登录信息,立即终止爬虫的进行。所以,在爬取豆瓣电影评论的时候,一定要记得注册账号并登录哦。

三、总结

这篇文章是豆瓣电影评论数据的爬取,除了爬取评论数据,还可以爬取评论用户、该用户是否看过电影、评论时间、五星评分等信息。就这篇文章而言,豆瓣数据的爬取相对较为简单,其中介绍了当代码运行时出现了HTTPError: HTTP Error 403: Forbid这样的问题该怎么解决-----------“千万不要忘了登录账号”。这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

标签: #ajax评论代码