使用Python抓取豆瓣影评数据的方法


Posted in Python onOctober 17, 2018

抓取豆瓣影评评分

正常的抓取

分析请求的url

https://movie.douban.com/subject/26322642/comments?start=20&limit=20&sort=new_score&status=P&percent_type=

里面有用的也就是startlimit参数,我尝试过修改limit参数,但是没有效果,可以认为是默认的
start参数是用来设置从第几条数据开始查询的

  • 设计查询列表,发现页面中有url中的查询部分,且指向下一个页面

使用Python抓取豆瓣影评数据的方法

于是采用下面的代码进行判断是否还有下一个页面

if next_url:
    visit_URL('https://movie.douban.com/subject/24753477/comments'+next_url)
  • 用requests发送请求,beautifulsoup进行网页解析

使用Python抓取豆瓣影评数据的方法

把数据写入txt

import requests
from bs4 import BeautifulSoup
first_url = 'https://movie.douban.com/subject/26322642/comments?status=P'
# 请求头部
headers = {
  'Host':'movie.douban.com',
  'Referer':'https://movie.douban.com/subject/24753477/?tag=%E7%83%AD%E9%97%A8&from=gaia_video',
  'Upgrade-Insecure-Requests':'1',
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
}
def visit_URL(url):
  res = requests.get(url=url,headers=headers)
  soup = BeautifulSoup(res.content,'html5lib')
  div_comment = soup.find_all('div',class_='comment-item') # 找到所有的评论模块
  for com in div_comment:
    username = com.find('div',class_='avatar').a['title']
    comment_time = com.find('span',class_='comment-time')['title']
    votes = com.find('span',class_='votes').get_text()
    comment = com.p.get_text()
    with open('1.txt','a',encoding='utf8') as file:
      file.write('评论人:'+username+'\n')
      file.write('评论时间:'+comment_time+'\n')
      file.write('支持人数:'+votes+'\n')
      file.write('评论内容:'+comment+'\n')
  # 检查是否有下一页
  next_url = soup.find('a',class_='next')
  if next_url:
    temp = next_url['href'].strip().split('&') # 获取下一个url
    next_url = ''.join(temp)
    print(next_url)
  # print(next_url)
  if next_url:
    visit_URL('https://movie.douban.com/subject/24753477/comments'+next_url)
if __name__ == '__main__':
  visit_URL(first_url)

模仿移动端

很多时候模仿移动端获得的页面会比PC端的简单,更加容易解析,这次模拟移动端,发现可以直接访问api获取json格式的数据,nice!

使用Python抓取豆瓣影评数据的方法

至于怎么模拟移动端只需要将user-agent修改为移动端的头

useragents = [
  "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/47.0.2526.70 Mobile/13C71 Safari/601.1.46",
  "Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
  "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)"

怎么获取这些头部?用火狐的插件user-agent switcher

之后的操作就是解析json

import random
import requests
import json
import time
first_url = 'https://m.douban.com/rexxar/api/v2/tv/26322642/interests?count=20&order_by=hot&start=0&ck=dNhr&for_mobile=1'
url = 'https://m.douban.com/rexxar/api/v2/tv/26322642/interests'
# 移动端头部信息
useragents = [
  "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/47.0.2526.70 Mobile/13C71 Safari/601.1.46",
  "Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
  "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)"
]
def visit_URL(i):
  print(">>>>>",i)
  # 请求头部
  headers = {
    'Host':'m.douban.com',
    'Upgrade-Insecure-Requests':'1',
    'User-Agent':random.choice(useragents)
  }
  params = {
    'count':'50',
    'order_by':'hot',
    'start':str(i),
    'for_mobile':'1',
    'ck':'dNhr'
  }
  res = requests.get(url=url,headers=headers,params=params)
  res_json = res.json()
  interests = res_json['interests']
  print(len(interests))
  for item in interests:
    with open('huge.txt','a',encoding='utf-8') as file:
      if item['user']:
        if item['user']['name']:
          file.write('评论用户:'+item['user']['name']+'\n')
      else:
        file.write('评论用户:none\n')
      if item['create_time']:
        file.write('评论时间:'+item['create_time']+'\n')
      else:
        file.write('评论时间:none\n')
      if item['comment']:
        file.write('评论内容:'+item['comment']+'\n')
      else:
        file.write('评论内容:none\n')
      if item['rating']:
        if item['rating']['value']:
          file.write('对电影的评分:'+str(item['rating']['value'])+'\n\n')
      else:
        file.write('对电影的评分:none\n')
if __name__ == '__main__':
  for i in range(0,66891,20):
    # time.sleep(2)
    visit_URL(i)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
Python聊天室程序(基础版)
Apr 01 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
python实现textrank关键词提取
Jun 22 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
Python 项目转化为so文件实例
Dec 23 Python
Python ORM框架Peewee用法详解
Apr 29 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
利用Python+OpenCV三步去除水印
May 28 Python
python 对key为时间的dict排序方法
Oct 17 #Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 #Python
通过python将大量文件按修改时间分类的方法
Oct 17 #Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 #Python
python按时间排序目录下的文件实现方法
Oct 17 #Python
python3 读取Excel表格中的数据
Oct 16 #Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 #Python
You might like
用PHP调用数据库的存贮过程
2006/10/09 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
jquery获取节点名称
2015/04/26 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
基于js中document.cookie全面解析
2017/09/14 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
python获取mp3文件信息的方法
2015/06/15 Python
Python中标准模块importlib详解
2017/04/16 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
python常用函数与用法示例
2019/07/02 Python
基于python3的socket聊天编程
2020/02/17 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
研究生毕业自我鉴定范文
2014/03/27 职场文书
银行求职自荐书
2014/06/25 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
贷款工作证明模板
2015/06/12 职场文书
会议室管理制度范本
2015/08/06 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书