基于爬虫和Kettle的豆瓣电影的采集与预处理

一:爬虫

1、爬取的目标

将豆瓣电影网上的电影的基本信息,比如:电影名称、导演、电影类型、国家、上映年份、评分、评论人数爬取出来,并将爬取的结果放入csv文件中,方便存储。

2、网站结构

   

图1豆瓣网网站结构详情

此次实验爬取豆瓣网中电影页面中的电影的基本信息。

每一个电影包括电影名称、导演、电影类型、国家、上映年份、评分、评论人数。页面具体情况如图2所示。

图2豆瓣网电影基本信息详情

3、爬虫技术方案

1)、所用技术:

         网站解析的使用的是Xpath、数据存储使用的是csv。

2)、爬取步骤:

1、导入所需的库,如re、time、requests、lxml、random和csv。

2、定义一个名为main的函数,该函数接受两个参数:page(页码)和f(文件对象)。

3、在main函数中,构造请求URL,设置请求头,并发送GET请求以获取网页内容。

4、使用lxml库解析网页内容,提取电影详情页的链接列表和电影名称列表。

5、遍历链接列表和名称列表,对于每个链接和名称,调用get_info函数来获取电影的详细信息。

6、在get_info函数中,同样构造请求URL,设置请求头,并发送GET请求以获取电影详情页的内容。

7、使用lxml库解析电影详情页的内容,提取导演、电影类型、国家、上映时间、评分和评论人数等信息。

8、打印提取到的信息,并将其写入CSV文件中。

9、在主程序中,创建一个CSV文件,并写入表头标题。

10、使用for循环遍历10个页面,调用main函数来爬取每一页的电影信息。

11、在每次循环之间,让程序休息一段时间,以避免过于频繁的请求导致IP被封禁。

4、爬取过程:

   

1)、导入所需要的包

    

import re
from time import sleep
import requests
from lxml import etree
import random
import csv

import re:导入正则表达式模块,用于处理字符串。

from time import sleep:从time模块导入sleep函数,用于让程序暂停执行一段时间。

import requests:导入requests模块,用于发送HTTP请求。

from lxml import etree:从lxml模块导入etree函数,用于解析HTML文档。

import random:导入random模块,用于生成随机数。

import csv:导入csv模块,用于操作CSV文件。

2)、设置请求头,定义min函数接收参数,访问连接提取列表

  

def main(page, f):url = f'https://movie.douban.com/top250?start={page * 25}&filter='headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36', }resp = requests.get(url, headers=headers)tree = etree.HTML(resp.text)# 获取详情页的链接列表href_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/@href')# 获取电影名称列表name_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')for url, name in zip(href_list, name_list):f.flush()  # 刷新文件try:get_info(url, name)  # 获取详情页的信息except:passsleep(1 + random.random())  # 休息print(f'第{i + 1}页爬取完毕')

  

3)、使用正则表达式开始爬取网页信息

def get_info(url, name):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36','Host': 'movie.douban.com',}resp = requests.get(url, headers=headers)html = resp.texttree = etree.HTML(html)# 导演dir = tree.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]# 电影类型type_ = re.findall(r'property="v:genre">(.*?)</span>', html)type_ = '/'.join(type_)# 国家country = re.findall(r'地区:</span> (.*?)<br', html)[0]# 上映时间time = tree.xpath('//*[@id="content"]/h1/span[2]/text()')[0]time = time[1:5]# 评分rate = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0]# 评论人数people = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/div/div[2]/a/span/text()')[0]print(name, dir, type_, country, time, rate, people)  # 打印结果csvwriter.writerow((name, dir, type_, country, time, rate, people))  # 保存到文件中

4)、将爬取结果放入csv文件中

5、爬虫结果

预处理

1、删除列

   

1)、新建转换,之后使用文件输入,将csv文件输入进行处理

    

之后进行字段获取。

2)、选择转换中的字段选择进行列删除,将上映时间这个列进行删除。

2、选择转换中的增加常量,增加评论数量这一列,查询电影评论的数量这一情况。

    

  1. 最后选择文本文件输出,将处理好的数据输出,输出的格式是csv文件,分割符用逗号隔开,编码用UTF-8J进行转码,防止输出文件中有乱码。文本文件命名成姓名_处理完成_csv。

4、预处理完全处理全流程:

三:爬虫数据源代码

代码:

import re
from time import sleep
import requests
from lxml import etree
import random
import csvdef main(page, f):url = f'https://movie.douban.com/top250?start={page * 25}&filter='headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36', }resp = requests.get(url, headers=headers)tree = etree.HTML(resp.text)# 获取详情页的链接列表href_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/@href')# 获取电影名称列表name_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')for url, name in zip(href_list, name_list):f.flush()  # 刷新文件try:get_info(url, name)  # 获取详情页的信息except:passsleep(1 + random.random())  # 休息print(f'第{i + 1}页爬取完毕')def get_info(url, name):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36','Host': 'movie.douban.com',}resp = requests.get(url, headers=headers)html = resp.texttree = etree.HTML(html)# 导演dir = tree.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]# 电影类型type_ = re.findall(r'property="v:genre">(.*?)</span>', html)type_ = '/'.join(type_)# 国家country = re.findall(r'地区:</span> (.*?)<br', html)[0]# 上映时间time = tree.xpath('//*[@id="content"]/h1/span[2]/text()')[0]time = time[1:5]# 评分rate = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0]# 评论人数people = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/div/div[2]/a/span/text()')[0]print(name, dir, type_, country, time, rate, people)  # 打印结果csvwriter.writerow((name, dir, type_, country, time, rate, people))  # 保存到文件中if __name__ == '__main__':# 创建文件用于保存数据with open('03-movie-xpath.csv', 'a', encoding='utf-8', newline='')as f:csvwriter = csv.writer(f)# 写入表头标题csvwriter.writerow(('电影名称', '导演', '电影类型', '国家', '上映年份', '评分', '评论人数'))for i in range(10):  # 爬取10页main(i, f)  # 调用主函数sleep(3 + random.random())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239272.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Parallel patterns: convolution —— An introduction to stencil computation

在接下来的几章中&#xff0c;我们将讨论一组重要的并行计算模式。这些模式是许多并行应用中出现的广泛并行算法的基础。我们将从卷积开始&#xff0c;这是一种流行的阵列操作&#xff0c;以各种形式用于信号处理、数字记录、图像处理、视频处理和计算机视觉。在这些应用领域&a…

尚硅谷离线数仓之采集平台

1. 用户行为日志 数据流向流程图如下&#xff0c;其中红框表示用户行为日志数据的流向图。 1.1 行为日志内容 行为日志主要包括以下几个内容 页面浏览记录动作记录曝光记录启动记录错误记录 页面浏览记录 动作记录 曝光记录 启动记录 1.2 用户行为日志格式 页面日志启动…

Radzen Blazor Studio 脚手架框架解读

背景 组织管理管理准备使用Blazor这个工具实现&#xff0c;因为其有对应的 scaffold 脚手架&#xff0c;先构建数据库&#xff0c;然后通过向导&#xff0c;生成CRUD以及对应的接口&#xff0c;那么有必要看一下&#xff0c;其内部的代码结构是什么样的。 结构 接口层 有两类…

STM32-04-STM32时钟树

STM32时钟树 什么是时钟&#xff1f; 时钟是具有周期性的脉冲信号&#xff0c;最常用的是占空比50%的方波。&#xff08;时钟是单片机的脉搏&#xff0c;搞懂时钟走向及关系&#xff0c;对单片机使用至关重要&#xff09;。 时钟树 时钟源 2个外部时钟源 高速外部振荡器(HSE…

vue中el-radio无法默认选中

页面上不生效&#xff0c;默认什么都不选中 <el-radio-group v-model"queryParams.videoUrlType"><el-radio :label"1">本地上传</el-radio><el-radio :label"2">外部链接</el-radio> </el-radio-group>da…

vue el-table最后一页所有数据批量删除或者单个删除,自动回到上一页,包括单条删除

批量删除单条删除//判断数据是否可以满一页isFillList () {const totalPage Math.ceil((this.docDateTotal - this.changeDocData.length) / this.docPageSize) // 总页数this.docPage this.docPage > totalPage ? totalPage : this.docPagethis.docPage this.docPage &…

高级 Python 面试问题与解答

文章目录 专栏导读1.什么是PIP&#xff1f;2.什么是 zip 函数&#xff1f;3.Python 中的 __init __ () 是什么&#xff1f;4.Python 中的访问说明符是什么&#xff1f;5.Python 中的单元测试是什么&#xff1f;6.Python全局解释器锁&#xff08;GIL&#xff09;&#xff1f;7.P…

docker-consul部署

目录 一、环境 二、consul服务器 三、registrator服务器 四、consul-template 一、环境 consul服务器 192.168.246.10 运行consul服务、nginx服务、consul-template守护进程 registrator服务器 192.168.246.11 运行registrator容器、运行ngi…

看完这篇你就知道了!人气爆表的6款Sketch插件大揭秘!

Sketch作为一种在线设计工具&#xff0c;一直是许多设计师的最爱。它不仅能快速建立原型&#xff0c;还能提供丰富的插件&#xff0c;以满足不同的需求。 今天&#xff0c;小抄将与大家分享6款流行的Sketch插件供参考。这些插件都是小抄精心挑选的&#xff0c;支持Windows、Ma…

flink1.14.5使用CDH6.3.2的yarn提交作业

使用CDH6.3.2安装了hadoop集群&#xff0c;但是CDH不支持flink的安装&#xff0c;网上有CDH集成flink的文章&#xff0c;大都比较麻烦&#xff1b;但其实我们只需要把flink的作业提交到yarn集群即可&#xff0c;接下来以CDH yarn为基础&#xff0c;flink on yarn模式的配置步骤…

React18-树形菜单-递归

文章目录 案例分析技巧通信展示效果实现代码技巧点技巧点 Refer to 案例分析 https://github.com/dL-hx/manager-fe/commit/85faf3b1ae9a925513583feb02b9a1c87fb462f7 从接口获取城市数据,渲染出一个树形菜单 要求: 可以展开和收起 技巧 学会递归渲染出一个树形菜单, 并点击后…

加密经济学:Web3时代的新经济模型

随着Web3技术的迅猛发展&#xff0c;我们正迈入一个全新的数字经济时代。加密经济学作为这一时代的核心&#xff0c;不仅在数字货币领域崭露头角&#xff0c;更是重新定义了传统经济模型&#xff0c;为我们开启了一个充满创新和机遇的新纪元。 1. 去中心化的经济体系 Web3时代…

MybatisPlus框架入门级理解

MybatisPlus 快速入门入门案例常见注解常用配置 核心功能条件构造器自定义SQLService接口 快速入门 入门案例 使用MybatisPlus的基本步骤&#xff1a; 1.引入MybatisPlus的起步依赖 MybatisPlus官方提供了starter&#xff0c;其中集成了Mybatis和MybatisPlus的所有功能&#…

接口测试用例设计 - 实战篇

一&#xff0e;接口测试流程 1&#xff0e;需求讨论 2&#xff0e;需求评审 3&#xff0e;场景设计 4&#xff0e;数据准备 5&#xff0e;执行 二&#xff0e;分析接口文档中哪些元素 1&#xff0e;接口名称 2&#xff0e;接口地址 3&#xff0e;支持格式 4&#xff0…

APM链路监控: Linux 部署 pinpoint

目录 一、实验 1.环境 2. 准备 3.HBase单机部署 4.pinpoint部署 二、问题 1.pinpoint有哪些功能 2.pinpoint架构是如何组成的 3.Linux中自带的jdk 如何设置JAVA_HOME 4. hbase启动报错 5.hbase的master启动失败 6.JPS命令如何安装和使用 一、实验 1.环境 &#x…

IPKISS ------ 远程服务器 IPKISS 内置示例安装问题

IPKISS ------ 远程服务器示例安装问题 引言正文 引言 很多时候&#xff0c;如果我们在服务器上使用管理员权限安装了 IPKISS 证书&#xff0c;而我们使用个人账号登录服务器时有时候会显示如下界面&#xff1a; 我们会看到这个 PyCharm (Luceda Academy) 是灰色的。那么该怎…

eclipse ADT安装及abap cds模版创建

文章目录 1.前提2.安装3.创建cds模版 abap cds 常用语法 https://blog.csdn.net/weixin_49198221/article/details/135531478?spm1001.2014.3001.5501 1.前提 需要了解版本关系: **1.eclipse:**2023-06 (4.28), 2023-09 (4.29), 2023-12 (4.30) 2.Windows: ​ 1.Windows …

短视频怎么截取gif动画?一个方法教你快速截取gif

电影、电视剧已经是我们日常生活中最常见最普遍的消遣娱乐方式了&#xff0c;当我们看到好看的画面想要截图里面的画面做成gif动画是应该如何制作gif动态图片&#xff08;https://www.gif.cn/&#xff09;呢&#xff1f;很简单&#xff0c;通过使用专业的gif在线制作工具&#…

VUE生命周期和生命周期四个阶段

Vue生命周期&#xff1a;一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个阶段&#xff1a;① 创建 ② 挂载 ③ 更新 ④ 销毁 vue的生命周期如图所示&#xff1a; Vue 生命周期函数&#xff08;钩子函数&#xff09;&#xff1a;Vue生命周期过程中&#xff0c;会自…

世微AP5160宽电压 LED 降压型恒流芯片14-18V 3A 电源PCB线路

这是一款14-18V 3A 电流的PCB设计方案. 运用的是世微AP5160 电源驱动IC,这是一款效率高&#xff0c;稳定可靠的 LED 灯恒流驱动控制芯片&#xff0c;内置高精度比较器&#xff0c;固定 关断时间控制电路&#xff0c;恒流驱动电路等&#xff0c;特别适合大功率 LED 恒流驱动。 …