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

这篇具有很好参考价值的文章主要介绍了基于爬虫和Kettle的豆瓣电影的采集与预处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:爬虫

1、爬取的目标

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

2、网站结构

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

图1豆瓣网网站结构详情

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

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

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

图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:
            pass
        sleep(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.text
    tree = 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、爬虫结果

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

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

二:预处理

1、删除列

   

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

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

    

之后进行字段获取。

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

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

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

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

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

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

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

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

三:爬虫数据源代码

代码:文章来源地址https://www.toymoban.com/news/detail-786706.html

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


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:
            pass
        sleep(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.text
    tree = 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())

到了这里,关于基于爬虫和Kettle的豆瓣电影的采集与预处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据采集技术与预处理学习一:大数据概念、数据预处理、网络数据采集

    目录 大数据概念: 1.数据采集过程中会采集哪些类型的数据? 2.非结构化数据采集的特点是什么? 3.请阐述传统的数据采集与大数据采集的区别? ​​​​​​​ ​​​​​​​4.大数据采集的数据源有哪些?针对不同的数据源,我们可以采用哪些不同的方法和工具? 数据

    2024年01月25日
    浏览(54)
  • 【数据采集与预处理】流数据采集工具Flume

    目录 一、Flume简介 (一)Flume定义 (二)Flume作用 二、Flume组成架构 三、Flume安装配置 (一)下载Flume (二)解压安装包 (三)配置环境变量 (四)查看Flume版本信息 四、Flume的运行 (一)Telnet准备工作 (二)使用Avro数据源测试Flume (三)使用netcat数据源测试Flume 五、F

    2024年01月21日
    浏览(103)
  • 1.0数据采集与预处理概述

    大数据的来源: 1.搜索引擎数据 2.电商交易数据 3.社交网络数据 4.物联网传感器数据 5.网站日志数据 数据采集的概念: 数据采集的ETL 工具负责将分布的、异构数据源中的不同种类,和结构的数据如文本数据、关系数据以及图片、视频等非结构化数据等抽取到临时中间层后进

    2024年02月02日
    浏览(44)
  • 【数据采集与预处理】数据接入工具Kafka

    目录 一、Kafka简介 (一)消息队列 (二)什么是Kafka 二、Kafka架构 三、Kafka工作流程分析 (一)Kafka核心组成 (二)写入流程 (三)Zookeeper 存储结构 (四)Kafka 消费过程 四、Kafka准备工作 (一)Kafka安装配置 (二)启动Kafka (三)测试Kafka是否正常工作 五、编写Spark Str

    2024年01月19日
    浏览(72)
  • 【数据采集与预处理】数据传输工具Sqoop

    目录 一、Sqoop简介 二、Sqoop原理 三、Sqoop安装配置 (一)下载Sqoop安装包并解压 (二)修改配置文件 (三)拷贝JDBC驱动 (四)验证Sqoop (五)测试Sqoop是否能够成功连接数据库 四、导入数据 (一)RDBMS到HDFS (二)RDBMS到HBase (三)RDBMS到Hive 五、导出数据 HDFS/Hive到RDBMS 六、

    2024年01月21日
    浏览(55)
  • 爬虫项目实战:利用基于selenium框架的爬虫模板爬取豆瓣电影Top250

    👋 Hi, I’m @货又星 👀 I’m interested in … 🌱 I’m currently learning … 💞 I’m looking to collaborate on … 📫 How to reach me … README 目录(持续更新中) 各种错误处理、爬虫实战及模板、百度智能云人脸识别、计算机视觉深度学习CNN图像识别与分类、PaddlePaddle自然语言处理知识图谱、

    2024年02月04日
    浏览(49)
  • YOLOv5训练自己的数据集(含数据采集、数据标注、数据预处理、借助colab训练)

    YOLOv5 github:GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch ONNX CoreML TFLite 先从github下载源码到本地,用pycharm打开工程   本次采集数据采用的方式是录取视频,然后用python截取视频帧当做图片,这是处理代码:   可以使用labelimg工具、make sense(Make Sense)在线标注,注意数据集需要与

    2024年02月05日
    浏览(92)
  • yolov2检测网数据集获取与预处理_采集健康和非健康猫狗数据

    阿里云天池数据集-cat-dog 因为开源数据库中没有非健康猫狗相关的,所以需要自己下载非健康猫狗数据,并制作数据集。 下面是用于爬取非健康猫狗数据的爬虫代码: 使用图片去重/相似图片清理利器 软件清除重复的图片数据。 使用ffmpeg将救助视频文件按照一秒截取一张

    2024年02月14日
    浏览(84)
  • 深度学习中基于python的预处理和图像扩增方法

    容易出现的报错: 错误原因通常为保存的路径不正确: 应改为: 即第一个参数应该写到文件的名称,而不能只写到文件夹就停止。 灰度图片和黑白图片有些相似,但并不完全相同。 灰度图片是指每个像素点的颜色由灰度值来表示,通常使用8位无符号整数(0-255)表示。灰

    2024年02月08日
    浏览(44)
  • 如何基于香橙派AIpro对视频/图像数据进行预处理

    本文分享自华为云社区《如何基于香橙派AIpro对视频/图像数据进行预处理》,作者: 昇腾CANN。 受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域,这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图

    2024年04月22日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包