前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python第三个项目:爬取豆瓣《哪吒之魔童降世》 短评

Python第三个项目:爬取豆瓣《哪吒之魔童降世》 短评

作者头像
王小婷
发布2019-08-12 16:44:25
5110
发布2019-08-12 16:44:25
举报
文章被收录于专栏:编程微刊编程微刊

前面爬完网站信息图片之后,今天的又有了个小目标,最近的电影哪吒很火,去豆瓣上看了一下 影评,决定了今天主要是实现Python第三个项目:爬取豆瓣《哪吒之魔童降世》 短评,然后下载在excel表格里面查看。

目标链接:https://movie.douban.com/subject/26794435/comments

在网上找了一个开源的小例子,但是豆瓣的网页结构以及有所调整,爬到的时间和评论都是空的,对代码进行了一些修改,可以爬取豆瓣最新的网页里面某部电影的短评,如果需要其他电影短评,直接改一下参数链接即可。

代码语言:javascript
复制
#_*_coding:utf-8_*_
import requests
import re
import csv
import time
from lxml import etree

def get_one_page(url):
   try:
       headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'}
       response = requests.get(url,headers=headers,timeout=10)
       if response.status_code == 200:
           # print(response.text)
           return response
       return None
   except EOFError as e:
       print(e)
       return None


def parse_one_page(res,info):
   info = []
   res = etree.HTML(res.content.decode())
   nodes_list = res.xpath('//div[@class="comment-item"]')
   for node in nodes_list:
       comic = {}
       comic['User'] = node.xpath('.//span[@class="comment-info"]/a/text()')[0].strip()
       comic['Time'] = node.xpath('.//span[@class="comment-info"]/span[3]/text()')[0].strip()
       comic['Comment'] = node.xpath('.//span[@class="short"]/text()')[0].strip()
       print(comic)
       info.append(comic)
   return info


def write_to_file(info):
    with open('《哪吒之魔童降世》短评.csv','a',newline='') as f:
       fieldnames = ['User','Time','Comment']
       writer = csv.DictWriter(f,fieldnames=fieldnames)
       writer.writeheader()
       try:
           writer.writerows(info)
       except:
           pass


def main(start):
   info = {}
   url = 'https://movie.douban.com/subject/26794435/comments?start=' + str(start) + '&limit=20&sort=new_score&status=P&percent_type='
   html = get_one_page(url)
   data = parse_one_page(html,info)
   write_to_file(data)


if __name__ == '__main__':
   for i in range(10):
       main(i*20)
       print('第{}本页采集完毕。'.format(str(i))) # 采集完一页后的标识
       time.sleep(1) # 采集完一页休息一秒

运行之后

自动生成了一个excel的表格

下载表格,打开查看,按照顺序把网页上的短评都抓取下来啦。

参考链接:https://zhuanlan.zhihu.com/p/36584668

原文作者:祈澈姑娘 技术博客:https://www.jianshu.com/u/05f416aefbe1

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档