爬取豆瓣电影top250的电影名称(完整代码与解释)

在爬取豆瓣电影top250的电影名称之前,需要在安装两个第三方库requests和bs4,方法是在终端输入:

pip install requests


pip install bs4

截几张关键性图片:

豆瓣top250电影网页

运行结果

 测试html文件标签的各个方法的作用:

# import requests

# response = requests.get("https://movie.douban.com/top250")

# print(response)


import requests
#引入模块 requests

from bs4 import BeautifulSoup 
# 从模块bs4中引入类 BeautifulSoup
# beautifulsoup4 是一个可以从HTML,XML文件中提取数据的库
# beautifulsoup:是一个解析器,可以特定的解析出内容,省去了我们编写正则表达式的麻烦。

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0"
}

# User-Agent:它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本,浏览器及版本等信息,在做爬虫时加上此信息,
# 可以伪装成浏览器;如果不加很可能被识别出为爬虫

# 由于豆瓣不对程序进行回应,故要伪装成浏览器进行请求,方法是在浏览器中随便打开一个网页,右击鼠标,点击
# 检查,出现页面后,刷新一下网页,随便点击一个请求报文,查看"User-Agent":后面的信息,并且复制该信息到
# headers中的"User-Agent":后,这就可以伪装成浏览器发送的请求

        
response = requests.get(f"https://movie.douban.com/top250", headers = headers)
    
#     requests的get方法返回的是一个包含服务器资源的Response对象,包含了从服务器返回的所有的相关资源。
#     response响应的属性:
#     response.status_code 响应的状态码
#     response.headers:响应头信息
#     response.encoding 编码格式信息
#     response.cookies cookies信息
#     response.url 响应的url信息
#     response.text 文本类型,通常是html文本
#     response.content bytes型也就是二级制数据,如图片/视频/音频等

print(response)
print(response.status_code)

    #print(response.text)

html = response.text
soup = BeautifulSoup(html, "html.parser")
#     soup=beautifulsoup(解析内容,解析器)
#     常用解析器:html.parser,lxml,Xml,html5lib

# [BeautifulSoup默认支持Pythonl的标准HTML解析库,但是它也支持一些第三方的解析库:如图]
# (https://s2.51cto.com/images/blog/202104/05/d369a62192f243f59879d10173b68e86.png?x-oss-process=image/format,webp)

all_titles = soup.find_all("span", attrs = {"class" : "title"})
#     打开https://movie.douban.com/top250页面,右击鼠标点击检查,点击左上角的箭头指标,点击网页中的电影名,可以发现在html文件
#         中对应的电影名被 span标签包裹住了,并且名字前面有一个键值对 "class" = "title";
    
#     使用find和find_all方式
#     find(name,attrs,recursive,text,**kwargs)
#         根据参数来找出对应的标签,但只返回第一个符合条件的结果。
#     find_all(name, attrs, recursive, text, **kwargs)
#         根据参数来找出对应的标签,但只返回所有符合条件的结果。
#     BeautifulSoup对象的find_all()方法返回的是一个由匹配的标签元素组成的列表。如果没有匹配的元素,返回一个空列表
    
#     筛选条件参数介绍:
#     name:为标签名,根据标签名来筛选标签
#     attrs:为属性,根据属性键值对来筛选标签,赋值方式可以为:属性名=值,attrs={属性名:值}(但由于class是python关键字,需要使用class_)
#     text:为文本内容,根据指定文本内容来筛选出标签,单独使用text作为筛选条件,只会返回text,所以一般与其他条件配合使用.
#     recursive:指定筛选是否递归,当为Falsel时,不会在子结点的后代结点中查找,只会查找子结点。

cnt = 0;
for title in all_titles:
    print(title, "title")
    print(title.name, "标签名")
    print(title.text, "text")
    print(title.string, "string")
    print(title.get_text(), "get_text()")
    print(title.attrs, "全部属性")
    print("")
    title_string = title.string
    cnt += 1
    if(cnt >= 3):
        break
    
    #由于all_titles 是find_all的返回内容,他是一个列表,列表中的每个元素就是html文件中的一行,就相当于一个标签

# 一.使用标签名查找

#     1)使用标签名来获取结点:
#         Soup.标签名

#     2)使用标签名来获取结点标签名(这个重点是name,主要用于非标签名式筛选时,获取结果的标签名):
#         soup.标签.name

#     3)使用标签名来获取结点属性:
#         soup.标签.attrs(获取全部属性)
#         soup.标签.attrs[属性名](获取指定属性)
#         soup.标签[属性名](获取指定属性)
#         soup.标签.get(属性名)
    
# 二.使用标签名来获取结点的文本内容:
#     soup.标签.text
#     soup.标签.string
#     soup.标签.get text()

#     if "/" not in title_string:
#         print(title_string)
            
#         由于我们只想要电影中文名,所以我们将不符合条件的字符串不打印出来,
#         打开https://movie.douban.com/top250页面,右击鼠标点击检查,点击左上角的箭头指标,点击网页中的电影名,可以发现在html文件
#         中对应的电影名被 span标签包裹住了,并且名字前面有一个键值对 "class" = "title",不难发现,就在中文电影名的下面有一个原版的
#         电影名,或者英文,或者其他国家的语言,但是我们不想要,再仔细观察会发现原版电影名前有一个字符 '/',而中文电影名没有字符'/';
#         所以可以用一个if 语句判断是否打印字符;

二。爬取豆瓣电影top250的电影名称完整代码与解析:

解释全在代码中:

import requests
#引入模块 requests
# requests模块作用,发送http请求,获取响应数据

from bs4 import BeautifulSoup 
# 从模块bs4中引入类 BeautifulSoup
# beautifulsoup4 是一个可以从HTML,XML文件中提取数据的库
# beautifulsoup:是一个解析器,可以特定的解析出内容,省去了我们编写正则表达式的麻烦。

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0"
}

# User-Agent:它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本,浏览器及版本等信息,在做爬虫时加上此信息,
# 可以伪装成浏览器;如果不加很可能被识别出为爬虫

# 由于豆瓣不对程序进行回应,故要伪装成浏览器进行请求,方法是在浏览器中随便打开一个网页,右击鼠标,点击
# 检查,出现页面后,刷新一下网页,随便点击一个请求报文,查看"User-Agent":后面的信息,并且复制该信息到
# headers中的"User-Agent":后,这就可以伪装成浏览器发送的请求


for start_num in range(0, 250, 25):
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers = headers)
    # 由于一个页面只展示25个电影,所以要爬取250个电影名字要爬取多个页面,用一个for循环结合range函数便可实现;
    
    if(start_num == 0):
        print(response.status_code, "status_code")
        print(response.headers, "headers")
        print(response.encoding, "encoding")
        print(response.cookies, "cookies")
        print(response.url, "url")
 #       print(response.text, "text")   #text 和 content信息太多,暂时不打印
 #       print(response.content, "content")
    
#     requests的get方法返回的是一个包含服务器资源的Response对象,包含了从服务器返回的所有的相关资源。
#     response响应的属性:
#     response.status_code 响应的状态码
#     response.headers:响应头信息
#     response.encoding 编码格式信息
#     response.cookies cookies信息
#     response.url 响应的url信息
#     response.text 文本类型,通常是html文本
#     response.content bytes型也就是二级制数据,如图片/视频/音频等

    print(response , "这是什么")
    #response本身是Response对象,并包含返回状态码,Response对象含有从服务器返回的所有的相关资源。

    html = response.text
    soup = BeautifulSoup(html, "html.parser")
#     soup=beautifulsoup(解析内容,解析器)
#     常用解析器:html.parser,lxml,Xml,html5lib

# [BeautifulSoup默认支持Pythonl的标准HTML解析库,但是它也支持一些第三方的解析库:如图]
# (https://s2.51cto.com/images/blog/202104/05/d369a62192f243f59879d10173b68e86.png?x-oss-process=image/format,webp)

#    all_titles = soup.find_all("span", attrs = {"class" : "title"})
    all_titles = soup.findAll("span", attrs = {"class" : "title"})
#这两句find函数都可行
        
        
#     打开https://movie.douban.com/top250页面,右击鼠标点击检查,点击左上角的箭头指标,点击网页中的电影名,可以发现在html文件
#         中对应的电影名被 span标签包裹住了,并且名字前面有一个键值对 "class" = "title";
    
#     使用find和find_all方式
#     find(name,attrs,recursive,text,**kwargs)
#         根据参数来找出对应的标签,但只返回第一个符合条件的结果。
#     find_all(name, attrs, recursive, text, **kwargs)
#         根据参数来找出对应的标签,但只返回所有符合条件的结果。
#     BeautifulSoup对象的find_all()方法返回的是一个由匹配的标签元素组成的列表。如果没有匹配的元素,返回一个空列表
    
#     筛选条件参数介绍:
#     name:为标签名,根据标签名来筛选标签
#     attrs:为属性,根据属性键值对来筛选标签,赋值方式可以为:属性名=值,attrs={属性名:值}(但由于class是python关键字,需要使用class_)
#     text:为文本内容,根据指定文本内容来筛选出标签,单独使用text作为筛选条件,只会返回text,所以一般与其他条件配合使用.
#     recursive:指定筛选是否递归,当为Falsel时,不会在子结点的后代结点中查找,只会查找子结点。

    for title in all_titles:
        title_string = title.string 
        # 提取为字符串
        
    #由于all_titles 是find_all的返回内容,他是一个列表,列表中的每个元素就是html文件中的一行,就相当于一个标签

# 一.使用标签名查找

#     1)使用标签名来获取结点:
#         Soup.标签名

#     2)使用标签名来获取结点标签名(这个重点是name,主要用于非标签名式筛选时,获取结果的标签名):
#         soup.标签.name

#     3)使用标签名来获取结点属性:
#         soup.标签.attrs(获取全部属性)
#         soup.标签.attrs[属性名](获取指定属性)
#         soup.标签[属性名](获取指定属性)
#         soup.标签.get(属性名)
    
# 二.使用标签名来获取结点的文本内容:
#     soup.标签.text
#     soup.标签.string
#     soup.标签.get text()

        if "/" not in title_string:
            print(title_string)
            
#         由于我们只想要电影中文名,所以我们将不符合条件的字符串不打印出来,
#         打开https://movie.douban.com/top250页面,右击鼠标点击检查,点击左上角的箭头指标,点击网页中的电影名,可以发现在html文件
#         中对应的电影名被 span标签包裹住了,并且名字前面有一个键值对 "class" = "title",不难发现,就在中文电影名的下面有一个原版的
#         电影名,或者英文,或者其他国家的语言,但是我们不想要,再仔细观察会发现原版电影名前有一个字符 '/',而中文电影名没有字符'/';
#         所以可以用一个if 语句判断是否打印字符;

参考文献:

爬虫基础篇_headers = {'user-agent': 'mozilla/5.0 (windows nt -CSDN博客

python爬虫之Beautifulsoup模块用法详解_51CTO博客_python爬虫模块

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go语言中的HTTP路由处理

在Web开发中,路由处理是至关重要的部分。它决定了当用户访问某个URL时,服务器应该如何响应。Go语言提供了多种库和工具来处理HTTP路由。下面,我们将深入了解如何在Go语言中处理HTTP路由。 Go语言的net/http包本身提供了基本的功能来处理路由…

面试算法89:房屋偷盗

题目 输入一个数组表示某条街道上的一排房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取到多少财产。例如,街道上5幢房屋内的财产用数组[2,3,4,5,3]表示…

《Aspect Sentiment Quad Prediction as Paraphrase Generation》论文阅读

文章目录 文章介绍文章模型问题定义文章模型PARAPHRASE建模 文章地址: https://arxiv.org/abs/2110.00796 文章介绍 这篇文章在已有的方面级情感分析任务的基础了研究了一项新的任务:方面级情感四元组提取(Aspect Sentiment Quad Prediction…

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError 文章目录 【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError1. 报错的具体情况2. 解决过程3. 其他问题3.1 ModuleNotFoundError: No module named OpenGL3.2 ModuleNotFoundEr…

期末考试成绩一键私发

期末考试即将开始,学生们心心念念的当然是成绩啦!老师们发布期末考试成绩的方式也是多种多样,趣味横生。 有的老师会选择传统的纸质方式。精心整理每个学生的成绩,然后用红笔亲自在成绩单上写下每个学生的分数。这种方式虽然古老…

鸿蒙OS:不止手机,是物联网应用开发

鸿蒙开发是华为自主研发的面向全场景的分布式操作系统,旨在将生活场景中各类终端进行整合,实现不同终端设备间的快速连接、资源共享、匹配合适设备、提供流畅的全场景体验。 鸿蒙开发具有以下特点: 面向全场景:鸿蒙系统能够覆盖…

基于web的电影院购票系统

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅一 、设计说明 1.1选题动因 当前…

短期爆发or未来趋势?浅谈音视频小程序在教育行业的应用发展

疫情三年,极大改变了人类的生活方式,尤其是一些线下化程度占比很大的行业,被迫进行信息化甚至数字化的转型。 教育场景数字化逐步成为刚需 经历过了2018年以来的,国家对在线教育行业的监管收紧,以及受益于 5G 技术的发…

新闻稿发布:媒体重要还是价格重要

在当今信息爆炸的数字时代,企业推广与品牌塑造不可或缺的一环就是新闻稿发布。新闻稿是一种通过媒体渠道传递企业信息、宣传品牌、事件或产品新闻的文本形式。发布新闻稿的过程旨在将企业的声音传递给更广泛的受众,借助媒体平台实现品牌故事的广泛传播。…

Spring Cloud Config相关面试题及答案(2024)

1、什么是 Spring Cloud Config,它解决了哪些问题? Spring Cloud Config 是一个为微服务架构提供集中化外部配置支持的项目。它是构建在 Spring Cloud 生态系统之上,利用 Spring Boot 的开发便利性,简化了分布式系统中的配置管理…

Linux驱动开发笔记(六):用户层与内核层进行数据传递的原理和Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135384355 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

互联网加竞赛 基于RSSI的室内wifi定位系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 wifi室内定位系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:…

list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方 原因 对于 double 类型的属性,不能直接使用减法运算符进行比较。减法运算符只能用于数值类型,而 double 是浮点数类型。 要在 double 属性上进行排序,可以使用 CompareTo 方法或者使用自定义的比较器。 更改 要在 double 属性…

iOS UITextField复制、粘贴框显示为英文如何解决

问题描述: 使用UITextField,欲粘贴文本,长按或者双击展示的提示框显示为英文 解决方案: 在Xcode配置文件info,plist文件中,新增Localizas属性,填入Chinese 结果如下: 提示框成功展示为中文

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端架构搭建

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

Android Framework | Linux 基础知识:入门指南

Android Framework | Linux 基础知识:入门指南 进行Android Framework开发需要具备基本的Linux基本知识,下面是一份Linux基础知识入门指南,希望对你有所帮助! 1. 简介 Linux 是一种免费、开源的操作系统,它是由芬兰…

基于Java SSM框架实现固定资产管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现固定资产管理系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&a…

【科研绘图】手把手教你Origin安装以及汉化,附带网盘链接

Origin安装 1.下载文件压缩包2.(软件安装部分)解压,以管理员身份运行,.exe,下一步3. (软件设置部分)打开软件无需更改,点OK4. (破解部分),找到刚才…

基于gitlab 12.8.0版本的完整镜像过程

目前已在一台服务器上安装了gitlab 12.8.0,并且稳定运行了有几年了,其上面也创建了大量的项目。目前要求对该gitlab及其上面的所有仓库做一个完整的镜像。具体操作过程如下: 1、确认现有的gitlab的版本号 2、到gitlab官网下载相同版本号的gi…

生活中危险的气体:一氧化碳与二氧化碳中毒的症状及安全预防措施

一氧化碳和血红蛋白亲和力超过氧气,会占用血红蛋白,导致缺氧。 二氧化碳会和血浆结合,导致血液pH值不正常,抑制呼吸,导致窒息。 通俗点说:一氧化碳是中毒,二氧化碳则是窒息。 一氧化碳中毒 …