爬虫实例九 豆瓣电影详情信息

2023-11-07

from bs4 import BeautifulSoup #网页解析,获取数据
import re #正则提取
import urllib.request,urllib.error  #制定url,获取网页数据
import xlwt  #进行excel操作
import time

def main():
    baseurl = "https://movie.douban.com/top250?start="

    #1、爬取网页
    datalist=getData(baseurl)

    savepath="豆瓣电影Top250.xls"
    #3、保存数据
    saveData(datalist,savepath)
    print(time.time() - start)#结束时间

#2、解析数据
#影片详情页链接
findLink = re.compile(r'<a href="(.*?)">') #创建正则表达式对象,表示规则(字符串的模式)
#影片图片链接
findImgSrc = re.compile(r'<img.*src="(.*?)" class="">',re.S)#re.S 忽略换行符
#影片名字链接
findTitle = re.compile(r'<span class="title">(.*)</span>')
#影片评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#影片评价人数
findJudge = re.compile(r'<span>(\d*)人评价</span>')
#找到概况
findInq = re.compile(r'<span class="inq">(.*)</span>')
#找到影片的相关内容
findBd = re.compile(r'<p class="">(.*)</p>',re.S)
start = time.time()#开始时间
#爬取页面
def getData(baseurl):
    datalist=[]
    for i in range(0,10): #调取页面信息的函数10次
        url=baseurl+str(i*25)
        html=askURL(url) #保存获取的源代码

        #逐一解析数据
        soup=BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_="item"):
            # print(item)#查看item全部信息
            data=[]#存放电影信息
            item=str(item)
            #影片中的超链接
            link = re.findall(findLink,item)[0] #re表示用来通过正则表达式查找指定的字符串
            data.append(link)
            imgSrc=re.findall(findImgSrc,item[0])#添加图片
            data.append(imgSrc)#添加图片
            titles = re.findall(findTitle,item)#片名可能只有有个中文名,没有外国名
            if(len(titles)==2):
                ctitle = titles[0]
                data.append(ctitle)
                otitle = titles[1].replace("/","")#去掉无关的符号
                data.append(otitle)#添加外国名
            else:
                data.append(titles[0])
                data.append(' ')#外国名字留空

            rating = re.findall(findRating,item)[0]
            data.append(rating) #添加评分

            judeNum = re.findall(findJudge,item)[0]
            data.append(judeNum) #添加评价人数

            inq = re.findall(findInq,item)
            if len(inq) !=0:
                inq = inq[0].replace("。","")#去掉句号
                data.append(inq)            #添加概述
            else:
                data.append(" ")            #留空

            bd = re.findall(findBd,item)[0]
            bd = re.sub('<br(\s+)?>(\s+)?'," ",bd) #去掉<br/>
            bd = re.sub('/'," ",bd) #替换/
            data.append(bd.split())    #去掉前后的空格

            datalist.append(data)       #把处理好的一部电影信息放入datalist
    return datalist

#保存数据

#得到一个指定的url的网页内容
def askURL(url):
    head={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    }
    request=urllib.request.Request(url,headers=head)
    html=""
    try:
        response=urllib.request.urlopen(request)
        html=response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html

def saveData(datalist,savepath):
    book=xlwt.Workbook(encoding="utf-8",style_compression=0)#创建woekbook对象
    sheet = book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)#创建
    col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","详细信息")
    for i in range(0,8):
        sheet.write(0,i,col[i])#列名
        for i in range(0,250):
            print("数据正在加载"+"第%d条"%i+"请稍等!!!")
            data=datalist[i]
            for j in range(0,8):
                sheet.write(i+1,j,data[j])#数据
            book.save(savepath)#保存
if __name__ == "__main__":
    main()
    print("数据爬取成功!")

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬虫实例九 豆瓣电影详情信息 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • 基于matlab实现信号的线性卷积与循环卷积

    系列文章目录 数字信号处理 DSP Digital Signal Process 是电子通信领域非常重要的研究方向 博主汇总了数字信号处理 DSP 中常用的经典案例分析 主要基于算法分析 MATLAB程序实现 信号图像显示 对数字信号处理的
  • python flask框架下登录注册界面_基于Flask框架如何实现用户登录功能

    form hidden tag form username class form control input lg placeholder 用户名 form password class form control input lg plac
  • dubbo解析-@EnableDubbo注解详解

    本文基于dubbo 2 7 5版本代码 文章目录 一 EnableDubbo注解功能 二 详细介绍注解引入的三个类的作用 dubbo必须配置注解 EnableDubbo 一 EnableDubbo注解功能 EnableDubbo整合了三个注
  • MetaFormer/PoolFormer学习笔记及代码

    MetaFormer PoolFormer学习笔记及代码 MetaFormer Is Actually What Y ou Need for Vision code https github com sail sg poolformer A
  • RN仿微信朋友圈图片拖拽删除

    目录 前言 初始时 渲染时 开始拖拽 拖拽中 拖拽结束 拖拽删除 参考链接 前言 之前负责的一个需求 让在RN端做仿微信朋友圈的图片删除和排序 由于经验和时间限制 就跟PM协商改为点击删除 由此欠下一个技术栈 今天是来还债的 本文基于tra
  • STM32 电机教程 16 - PMSM电机磁场定向控制原理

    前言 磁场定向控制又称矢量控制 FOC 本质上为控制定子电流的幅度和相位 使之产生的磁场和转子的磁场正交 以产生最大的扭矩 1 PMSM 的磁场定向控制 磁场定向控制 Field Oriented Control FOC 表示这样一种方法
  • 计算机网络应用层之HTTP协议

    一 什么是HTTP协议 HTTP是HyperText Transfer Protocol即超文本传输协议的缩写 是Web应用层协议之一 HTTP协议由两部分程序实现 一个客户机程序和一个服务器程序 它们运行在不同的端系统中 通过交换HTTP
  • Java SPI 机制

    文章首发于个人博客 欢迎访问关注 https www lin2j tech 什么是 SPI 机制 SPI Service Provider Interface 是 Java 内置的一种服务提供发现机制 将功能的实现交给第三方 用来拓展和替换
  • Python 中的 retrying 库

    文章目录 retrying 模块 一 简介 二 使用方法 1 无参数 2 有参数 2 1 stop max attempt number 2 2 stop max delay 2 3 wait fixed 2 4 wait random m
  • 2018.6.20 Java考试试题总结(Java语言基础与面向对象编程)最新版

    Java考试试题总结 一 单选题 每题1分 50 50分 1 java程序的执行过程中用到一套JDK工具 其中javac exe指 B A java语言解释器 B java字节码编译器 C java文档生成器 D java类分解器 2 在J
  • 华为OD机试 - 连续出牌数量(Java)

    题目描述 有这么一款单人卡牌游戏 牌面由颜色和数字组成 颜色为红 黄 蓝 绿中的一种 数字为0 9中的一个 游戏开始时玩家从手牌中选取一张卡牌打出 接下来如果玩家手中有和他上一次打出的手牌颜色或者数字相同的手牌 他可以继续将该手牌打出 直至
  • 测试圈的网红工具:Jmeter到底难在哪里?!

    雨果的公司最近推出了一款在线购物应用 吸引了大量用户 然而随着用户数量的增加 应用的性能开始出现问题 用户抱怨说购物过程中页面加载缓慢 甚至有时候无法完成订单 小欧作为负责人员迫切需要找到解决方案 在学习JMeter之前 小欧只能通过手动测
  • 【画方】画方网络准入管理系统

    一 DHCP Server与DHCP准入方式 NAM内置了一个DHCP服务器 它与其它模块配合来提供DHCP准入控制功能 这个服务器与标准DHCP服务器有很大区别 它不仅利用DHCP协议实现了IP地址的中心下发功能 还利用操作系统内置的DH
  • 神经网络算法基本原理及其实现

    目录 背景知识 人工神经元模型 激活函数 网络结构 工作状态 学习方式 BP算法原理 算法实现 MATLAB 背景知识 在我们人体内的神经元的基本结构 相信大家并不陌生 看完下面这张图 相信大家都能懂 什么是人工神经网络 人工神经网络是具有
  • 《软件调试艺术》读后感七

    1 线程调试 对线程的调试用的最多的可能是thread命令了 查看程序中有多少线程使用Infothreads 进入到某个线程的内部使用thread count 这样就可以进入到count线程的内部 线程调试中用的最多的还有就是bt命令 这个
  • Python 数据分析1:三种工具实现连接、读取MySQL数据库并处理MySQL数据为DataFrame

    文章目录 一 前言 二 通过 pymysql 获取 MySQL 数据 2 1 连接数据库 2 2 读取数据 2 3 处理数据 三 通过 mysqlclient 获取 MySQL 数据 四 通过 SQLAlchemy 获取 MySQL 数据
  • protobuf-IOS简单总结(编译、环境搭建)

    什么是protobuf Protocol Buffers are a way of encoding structured data in an efficient yet extensible format Google uses Pro
  • 用Vue的三种方法实现加减乘除运算

    js插件 vue js 教程 首先在工具内引入vue js 然后在body里面创建一个div并设置id 我这里给id命名为 app div 在id命名为 app 的div内使用input标签和select标签来设置运算框 第一种comput
  • 多个接口请求出现报错,提示会连续出现多个,如何只弹出一个提示

    场景 如果出现网络问题或者token失效 刷新页面 如果有多个接口请求就会出现报错 那么提示就会连续弹出几个 如图 使用的是vue element ui 解决方法 重写一了个message import Message from eleme
  • 爬虫实例九 豆瓣电影详情信息

    from bs4 import BeautifulSoup 网页解析 获取数据 import re 正则提取 import urllib request urllib error 制定url 获取网页数据 import xlwt 进行exc