python爬虫新闻内容然后词云_Python爬虫(一)抓取豆瓣短评+词云分析

需求:抓取《纯洁心灵·逐梦演艺圈》的短评,并通过词云分析高频词语

(一)分析页面

1.首先访问《纯洁心灵·逐梦演艺圈》链接:

https://movie.douban.com/subject/26322774/comments?status=P

发现页面渲染并不是rest风格的request,在network中没有返回XHR格式的response,所以需要请求页面,解析html页面抓取数据

2.查看短评在页面中的位置,位于class=' comment-content'的p标签的span标签的文本中(注意' comment-content'前有一个空格)

所以xpath表达式为:"//p[@class=' comment-content']/span"

3.首页短评url为:https://movie.douban.com/subject/26322774/comments?status=P

后续每页短评url为:https://movie.douban.com/subject/26322774/comments?start=20&limit=20&status=P&sort=new_score

所以抓取首页短评时需要特殊处理

(二)准备所需的python module

1)requests库

pip install requests

2)lxml库

pip install lxml

(三)代码

# encoding=utf-8

"""

豆瓣短评spider

"""

import os

import random

import sys

from time import sleep

import requests

from lxml import etree

reload(sys)

sys.setdefaultencoding('utf8')

headers = {

'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36",

'Host': 'movie.douban.com',

'Connection': 'keep-alive',

'Accept': 'application/json, text/plain, */*'

}

# 随机睡眠

def random_sleep():

t = random.randint(1, 3)

sleep(t)

def spider_page(url, xpath):

"""

根据xpath表达式解析url指定html页面

:param url:

:param xpath: xpath表达式

:return:

"""

random_sleep()

response = requests.request(method='GET', url=url, headers=headers)

selector = etree.HTML(response.text)

return selector.xpath(xpath)

def spider_douban(subject, path):

"""

将短评写入指定路径文件

:param subject: 豆瓣subject id

:param path: 指定路径

:return:

"""

url = 'https://movie.douban.com/'

url_fisrt_page = url + 'subject/' + str(subject) + '/comments?status=P'

comment_list = spider_page(url_fisrt_page, "//p[@class=' comment-content']/span")

fd = os.open(path, os.O_RDWR | os.O_CREAT)

for data in comment_list:

os.write(fd, data.text) # 写入text

print '第一页爬取完毕'

try:

for i in xrange(0, 20):

print '第' + str(i + 2) + '页写入中...'

url_next_page = url + 'subject/' + str(subject) + '/comments?start=' + str(

i * 20) + '&limit=20&status=P&sort=new_score'

comment_list = spider_page(url_next_page, "//p[@class=' comment-content']/span")

for comment in comment_list:

os.write(fd, comment.text) # 写入text

print '写入数据条数:{}'.format(len(comment_list))

except RuntimeError as e:

print e

os.close(fd)

if __name__ == '__main__':

spider_douban(26322774, '/Users/gcl/tools/os/zhumeng.txt')

output:

第1页写入中...

写入数据条数:20

第2页写入中...

写入数据条数:20

第3页写入中...

写入数据条数:20

第4页写入中...

写入数据条数:20

第5页写入中...

写入数据条数:20

第6页写入中...

写入数据条数:20

第7页写入中...

写入数据条数:20

第8页写入中...

写入数据条数:20

第9页写入中...

写入数据条数:20

第10页写入中...

写入数据条数:20

第11页写入中...

写入数据条数:20

第12页写入中...

写入数据条数:0

第13页写入中...

写入数据条数:0

第14页写入中...

写入数据条数:0

第15页写入中...

发现在13页之后,抓取的数据量变为0

访问url:https://movie.douban.com/subject/26322774/comments?start=500&limit=20&status=P&sort=new_score

显示

豆瓣的反爬虫机制:当爬取前几百条数据时,继续爬取时会提醒没有权限。

解决思路:模拟登陆豆瓣,豆瓣的验证码机制是滑动验证码,在本文中不涉及,后续再讨论

通过selenium解决

(四)词云分析

将抓取的数据放入第三方词云分析库

如有问题,欢迎讨论哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值