【python数据挖掘】爬取豆瓣影评数据
概述:
爬取豆瓣影评数据步骤:
1、获取网页请求
2、解析获取的网页
3、提速数据
4、保存文件
源代码:
# 1、导入需要的库
import urllib.request
from bs4 import BeautifulSoup
# 随机数的库
import random
# 时间库
import time
# 表格库
import csv
# 2、分多个浏览器访问豆瓣网,防止访问多页时被拒绝
# 每个浏览器在请求数据的时候,请求头是不一样
# 计算机命名规则:驼峰命名法
# url:传值过来的访问地址
def getRequest(url):
# 谷歌浏览器
header1 = {
"Host":"movie.douban.com",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
}
# 火狐浏览器
header2 = {
"Host": "movie.douban.com",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:73.0) Gecko/20100101 Firefox/73.0"
}
# 将浏览器装入列表里
list = [header1,header2]
# 随机取一个请求头 len(list)-1:列表长度-1
index = random.randint(0,len(list)-1)
# 随机用一个请求头,开始访问地址
req = urllib.request.Request(url=url,headers=list[index])
# 返回结果
return req
# 封装函数,爬取数据
def getData(url,commentAll):
# 获取处理后的请求
req = getRequest(url)
# 打开网址
html = urllib.request.urlopen(req)
# 读取数据(data得到所有数据)
data = html.read()
# 输出爬取到的所有数据,进制形式显示
# print(data)
# 定义soup对象,解析网页
soup = BeautifulSoup(data,"html.parser")
# 找到装有所有评论的id名为comments的div
# ["数据"] 数组里只有一个元素----数据
comments = soup.select("#comments")[0]
# print(comments)
# 读取到每一条评论,div的class名为comment-item
items = comments.select(".comment-item")
# print(items)
# 循环遍历每一条评论
for i in items:
# 找到装着用户名和星级的span标签,class名为comment-info
info = i.select(".comment-info")[0]
# print(info)
# 读出用户名的a标签里面的字符串用户名 [<a></a>]
# author = info.select("a")[0].string 数据在列表里
author = info.find("a").string
# print(author)
# 取星级,找到装着星级的span标签,读取title值
# ["看过",星级,时间]
star = info.select("span")[1]["title"]
# print(star)
# 取评论,找到class名为short的p标签
short = i.select(".short")[0].string
# print(short)
# 将 用户名、星级、评论 装入在字典里面
talk = {"author":author,"star":star,"short":short}
# print(talk)
# 将字典类型的数据,加到列表里面
commentAll.append(talk)
# 返回整个列表
return commentAll
# 封装函数,把数据装入表格中
def writeInto(commentAll):
# 打开表格 as从命名 file
# 参数1:表格名称
# 参数2:"a+"追加模式 "w"写入模式 "r"读取模式
# w:writer r:read a:append
# wb二进制,不带b就是文本
# 参数3:数据格式为utf-8
# 参数4:newline 新行,空行
with open("douban.csv","a+",encoding="utf-8",newline="") as file:
# 向表格写入数据
writer = csv.writer(file)
# 数据在commentAll列表,循环遍历列表,读取数据
for i in commentAll:
# 读取每一个字段 用户名、星级、评论
info = [i["author"],i["star"],i["short"]]
# 把数据写入表格
writer.writerow(info)
# 关闭表格
file.close()
# 函数的入口
# 直接输入main,有提示
if __name__ == '__main__':
# 初始化一个空列表,将得到的所有数据
commentAll = []
# range()产生序列 0.1.2,爬取3页
for i in range(0,3):
# 爬取的网页地址
# limit=20 每一页读取20条数据
# start = 80 从第几条读取数据 20-39 40-59 60-79 80-99
url = "https://movie.douban.com/subject/25931446/comments?start=%d&limit=20&sort=new_score&status=P"%(i*20)
# 调用函数,爬取数据
getData(url,commentAll)
# 每爬取一个页面数据,休息10秒,防止被封号
time.sleep(10)
# 调用函数,爬取完数据,装入表格
writeInto(commentAll)
# 将表格用 记事本 打开,另存为ANSI格式
# 如果你要操作数据,还要转回utf-8
效果图:

作者
【python数据挖掘】爬取豆瓣影评数据的更多相关文章
- Scrapy 通过登录的方式爬取豆瓣影评数据
Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...
- python爬虫-爬取豆瓣电影数据
#!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:27# 文件 :spider_05.py# IDE :PyChar ...
- python定时器爬取豆瓣音乐Top榜歌名
python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet mail:vpoet_sir@163.com 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 # ...
- Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块
工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...
- python系列之(3)爬取豆瓣图书数据
上次介绍了beautifulsoup的使用,那就来进行运用下吧.本篇将主要介绍通过爬取豆瓣图书的信息,存储到sqlite数据库进行分析. 1.sqlite SQLite是一个进程内的库,实现了自给自足 ...
- Python爬虫之抓取豆瓣影评数据
脚本功能: 1.访问豆瓣最受欢迎影评页面(http://movie.douban.com/review/best/?start=0),抓取所有影评数据中的标题.作者.影片以及影评信息 2.将抓取的信息 ...
- python 爬虫&爬取豆瓣电影top250
爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...
- Python3.5爬取豆瓣电视剧数据并且同步到mysql中
#!/usr/local/bin/python # -*- coding: utf-8 -*- # Python: 3.5 # Author: zhenghai.zhang@xxx.com # Pro ...
- [超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理
爬取豆瓣电影<大侦探皮卡丘>的影评,并做词云图和关键词绘图第一步:找到评论的网页url.https://movie.douban.com/subject/26835471/comments ...
随机推荐
- Commvault逻辑架构及组件说明
在学习和使用Commvault软件的过程中,经常会碰到一些术语和缩写,初学者可能并不是很清楚这些术语和缩写的具体含义,接下来我们梳理一下Commvault软件中这些属于和缩写的含义,有可能一次不能梳理 ...
- jdk源码Object类解析
一 简介 java.lang.Object,是Java所有类的父类,在你编写一个类的时候,若无指定父类(没有显式extends一个父类),会默认的添加Object为该类的父类. 在JDK 6之前是编译 ...
- Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区
前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么.虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事 ...
- 深入JVM类加载器机制,值得你收藏
先来一道题,试试水平 public static void main(String[] args) { ClassLoader c1 = ClassloaderStudy.class.getClass ...
- 设计模式-05建造者模式(Builder Pattern)
1.模式动机 比如我们要组装一台电脑,都知道电脑是由 CPU.主板.内存.硬盘.显卡.机箱.显示器.键盘和鼠标组成,其中非常重要的一点就是这些硬件都是可以灵活选择,但是组装步骤都是大同小异(可以组一个 ...
- c++中重载运算符
重载运算符 1,成员函数运算符 运算符重载为类的成员函数一般格式如下 <函数类型> operator <运算符> (参数表) {函数体} 调用成员函数运算符如下 <对象名 ...
- python中Threadlocal变量
在多线程环境下,每个线程都有自己的数据.一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁. 不加锁就会出现变量会被修改的问题,进而 ...
- https原理总结
博客搬家: https原理总结 最近在公司项目的服务器上做一些内部接口,要求使用https,于是花时间研究了一波.我们熟知的http在传输时未对数据进行加密,在传输一些敏感信息时存在着不小的安全隐患. ...
- Ops:jar包启动关闭脚本
简介 公司开发架构为java语言的rpc dubbo架构,将功能分解为各个模块,模块较多,发布到环境上的应用为编译后的jar包和配置文件,以及启动关闭jar包的shell脚本.之前经常会出现进程启动不 ...
- [Effective Java 读书笔记] 第三章类和接口 第十八--十九条
十八条 接口优于抽象类 接口的特点: 1.一个类可以实现多个接口,不能继承多个类(抽象类) 2.接口不能有具体的方法实现,只定义标准类型 骨架类: 即实现一个abstract类来实现接口,提供给其他类 ...