爬虫实战爬取豆瓣电影Top250榜单电影

2023-11-11

爬虫实战爬取豆瓣电影Top250榜单电影

实战内容:直接上代码,重要地方有注释。

from bs4 import BeautifulSoup
import re
import urllib.request,urllib.error
import xlwt
import sqlite3
def main():
    baseurl = "https://movie.douban.com/top250?start="
   #1.爬取网页
    datalist = getData(baseurl)
    savepath = "豆瓣电影Top250.xls"
   #3.保存数据
    saveData(datalist,savepath)
    #askURL("https://movie.douban.com/top250?start=")


findlink = re.compile(r'<a href="(.*?)">')#影片详情链接
findImgSrc = re.compile(r'<img.*src="(.*?)"',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)

#爬取网页
def getData(baseurl):
    datalist = []
    for i in range(0,10):
        url =baseurl + str(i*25)
        html = askURL(url)
        #2.逐一解析
        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]
            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('')
            reting =re.findall(findRating,item)[0]
            data.append(reting)

            judgeNum = re.findall(findJudge,item)[0]
            data.append(judgeNum)

            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)
            bd = re.sub('/'," ",bd)
            data.append(bd.strip())

            datalist.append(data)
    print(datalist)
    return datalist
#得到指定网站url内容
def askURL(url):
    head = {
        "User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89Safari / 537.36"
    }
    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html= response.read().decode("utf-8")
        #print(html)

    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)
    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+1))
        data = datalist[i]
        for j in range(0,8):
            sheet.write(i+1,j,data[j])

    book.save(savepath)






if __name__== "__main__":
    main()

不说这么多,直接上结果。
在这里插入图片描述

在这里插入图片描述

喜欢的小伙伴可以收藏,代码可以直接复制在pycharm中运行,运行结果保存在Excle中。

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

爬虫实战爬取豆瓣电影Top250榜单电影 的相关文章

随机推荐

  • 实习生面试软件测试岗位指南

    实习生面试软件测试岗位指南 最近一直在面试测试实习生的岗位 发现实习生的基础知识参差不齐 有的基本做什么就来面试 这样子会浪费实习机会 有的好机会都错过了 下面给实习同学一些建议 1 公司招实习生的目的 1 软件测试好入门 实习生做项目好上
  • 学习爬虫总结(一)

    作为一名大三狗 以前的两年似乎也没有坚持学习什么 现在我决定我要每天坚持学一点东西 来提升自己 爬虫这个名词第一次出现在我的印象中是学习中国大学MOOC里面的python语言程序设计慕课 那时候我对爬虫并不了解 也没有学习的兴趣 最近在看一
  • Springboot项目Aop、拦截器、过滤器横向对比

    前言 伟人曾经说过 没有调查就没有发言权 好像是伟人说的 不管谁说的 这句话是正确的 有些东西看着简单 张口就来 但很有可能是错的 我个人的经验是 aop 过滤器 拦截器的实现方式很简单 一学就会 不用就忘 忘了再学 学了再忘 如此循环内耗
  • springboot整合请求分析

    文章目录 请求 初识restTemplate GET请求 1 传参替换使用 来表示坑位 根据实际的传参顺序来填充 如下 2 使用 xx 来传递参数时 这个xx对应的就是map中的key 3 当响应头是application json cha
  • 计算机单位及单位转换

    计算机单位及转换 一 位 计算机中表示信息的最小单位 表示一位二进制信息 以b表示 bit 0 1 一个字节8位 字节 计算机中处理信息的最小单位 以八位二进制信息 以B表示 1B 8b 一个整数4个字节 字长 一个字所包含二进制输的位数
  • 刷脸支付逐渐普及刷脸项目也逐渐火热起来

    科技的发展总是朝着更智能化的方向前进 在此基础上 人脸识别技术因其生物支付特征明显 和特征唯一性获得了众多项目的青睐 将这一技术迅速线下落地产业化 随着人脸识别技术的逐渐成熟 刷脸支付应运而生 刷脸支付代理项目也逐渐火热起来 我们体验了刷脸
  • 认识 MySQL

    文章目录 1 前言 2 数据库 3 MySQL 1 前言 在当今信息时代 数据被认为是最宝贵的资源之一 因为它可以帮助我们洞察趋势 做出决策 构建智能系统 并推动创新 而数据库技术的崛起 尤其是MySQL数据库 为我们提供了强大的工具来存储
  • vue中实现删除校验-iview的气泡提示

    前言 很多时候我们担心删除会出现误删的情况 这样就需要对删除进行二次校验 确定是否继续删除 效果图 实现代码
  • Type Incompatible operand types String and int

    今天eclipse包了一个错误 意思就是Description Resource Path Location Type Incompatible operand types String an 但是昨天还没有错误为什么那 最后找了好久发现不
  • 区块链之PBFT算法

    在公有链中用的最多的是pow算法和pos算法 这些算法都是参与者的利益直接相关 通过利益来制约节点诚实的工作 解决分布式系统中的拜占庭问题 拜占庭容错算法是一种状态机副本复制算法 通过节点间的多轮消息传递 网络内的所有诚实节点就可以达成一致
  • jQuery实现省市二级联动

    主要实现流程 步骤分析 1 设置加载页面函数事件 2 在里面获取select的id并且设置下拉事件并且绑定函数 3 定义2维数组存放相应的城市 4 遍历2维数组省份 并且使用if判断 点击时的this value值 如果值与省份 二位数组下
  • 深入理解 == 与 equals 区别

    深入理解 与 equals 区别 这是一个老生常谈的问题了 也是在面试过程中常见的问题之一 网上所提供的常用回答是 equals比较值 比较值和引用 对java源码有了一定了解了之后回头再思考这个问题并不是那么的简单单一 java中的二元运
  • springboot的配置注入

    文章目录 第一种 使用 Value 第二种 使用 ConfigurationProperties springboot配置注入 数据绑定 有两种方式 第一种 使用 Value 首先 在application yml中定义自己的数据 appl
  • 蓝桥杯基础试题汇总(Python)看这一篇就够了

    目录 蓝桥杯习题汇总 1 试题 基础练习 A B问题 2 数列问题 3 试题 基础练习 十六进制转八进制 4 试题 基础练习 十六进制转十进制 5 试题 基础练习 十进制转十六进制 6 试题 基础练习 序列求和 7 试题 基础练习 圆的面积
  • 浅谈数据同步实现rsync+inotify

    浅谈数据同步实现rsync inotify 数据的实时同步介绍 数据的实时同步实现 inotify inotify的介绍 实现inotify软件 inotify rsync使用方式 实现inotify rsync 1 rsync基本概述 2
  • ubuntu安装deb包

    ubuntu安装deb包 安装deb包 sudo dpkg i 包名 安装deb包后 可能会出现依赖关系而不能正常安装软件 这个时候先更新下源然后解决依赖关系后重装即可 sudo apt get update 更新 sudo apt get
  • 教程网站 汇总:Linux 、 C /C++ 、HTML、CSS

    C 语言教程 菜鸟教程 https www runoob com cprogramming c tutorial html C 教程 菜鸟教程 https www runoob com cplusplus cpp tutorial html
  • 安装apache后无法访问localhost但可以访问127.0.0.1的解决方法

    localhost与127 0 0 1的概念和工作原理之不同 概念 localhost 也叫local 正确的解释是 本地服务器 127 0 0 1 在windows等系统的正确解释是 本机地址 本机服务器 工作原理 localhot 是不
  • VS2019的常见错误和调试功能

    目录 一 VS2019常见问题 1 scanf问题 2 如何在当前页面下再创建新项目和创建多项目后无法运行当前项目的问题 二 VS2019的调试功能 不打断点 三 VS2019的调试功能 打断点 四 总结 一 VS2019常见问题 1 sc
  • 爬虫实战爬取豆瓣电影Top250榜单电影

    爬虫实战爬取豆瓣电影Top250榜单电影 实战内容 直接上代码 重要地方有注释 from bs4 import BeautifulSoup import re import urllib request urllib error impor