如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
我们生活在一个快节奏的时代里,每天除了辛苦的提升自己,为生活打拼之外,偶尔的放松去看场电影也是必要的。可是能够抽出的时间有限,选择看哪部电影就是一个挠头的问题了。
幸好,有类似猫眼电影、豆瓣电影、淘票票这样的平台为我们根据用户的观影评价进行打分并建立了排行榜。根据这份榜单,我们就能参考排行来选择自己喜欢的电影了。
今天,我就带着大家来爬取“猫眼电影 - 热映口碑榜”的数据以及对应影片的详细信息。
首先,我们看一下这份榜单的网页。
https://maoyan.com/board/7
这份榜单对应的源码如下:
从源码中,我们可以看到所有的评价信息都包含在dd
内的p
标签中,影片的详情信息通过a
标签的href
属性链接到另外的网页。在上图的例子中我们能够看到“流浪地球”这部影片的链接网址是:https://maoyan.com/films/248906
。
接下来,我们就看看链接影片详情的网页,如下:
影片详情对应的源码如下:
在li.ellipsis
和.dra
类中,我们可以得到该影片的类型以及简介的数据。
我们只要把榜单网页以及对应影片详情网页的HTML DOM
节点得到,在用“选择器”把对应的部分提取出来就可以了。
这里推荐一个处理HTML DOM
的开源工具:Jumony,可以在 Github 上下载。
下载地址为:
https://github.com/Ivony/Jumony
这里对HTML DOM
开源工具不做过多介绍,要是大家感兴趣,我后面再写几篇图文来介绍这个工具。
网页分析部分介绍完了,下面我们介绍代码部分。
1. 定义存储电影对象的结构Film
,包含影片的排名、名称、类型、主演、上映时间、用户评分、简介等信息。
public class Film
{/// <summary>/// 获取或设置 排名/// </summary>public int Num { get; set; }/// <summary>/// 获取或设置 名称/// </summary>public string Name { get; set; }/// <summary>/// 获取或设置 类型/// </summary>public string Type { get; set; }/// <summary>/// 获取或设置 主演/// </summary>public string Actor { get; set; }/// <summary>/// 获取或设置 上映时间/// </summary>public string Time { get; set; }/// <summary>/// 获取或设置 用户评分/// </summary>public string Score { get; set; }/// <summary>/// 获取或设置 简介/// </summary>public string Introduction { get; set; }/// <summary>/// 格式化输出/// </summary>/// <returns></returns>public override string ToString(){string str = Environment.NewLine+ "---" + Environment.NewLine+ "## Top" + Num.ToString().PadLeft(2, '0') + " <br>"+ Name + Environment.NewLine+ "- 类型:" + Type + Environment.NewLine+ "- 主演:" + Actor + Environment.NewLine+ "- 上映时间:" + Time + Environment.NewLine+ "- 用户评分:<span style='color:#FF8F00'><b>" + Score+ "</b></span>" + Environment.NewLine+ "- 剧情简介:" + Introduction + Environment.NewLine;return str;}
}
2. 定义根据URL
得到对应HTML DOM TREE
的方法。
public static IHtmlDocument GetHtmlDocument(string url)
{IHtmlDocument document;try{document = new JumonyParser().LoadDocument(url);}catch{document = null;}return document;
}
3. 得到电影榜单以及对应影片详细信息的方法。
public static List<Film> GetFilms()
{List<Film> result = new List<Film>();//热映口碑榜string url = "https://maoyan.com/board/7";IHtmlDocument doc = GetHtmlDocument(url);if (doc == null)return result;List<IHtmlElement> lists = doc.Find("dd").ToList();for (int i = 0; i < lists.Count; i++){List<IHtmlElement> infor = lists[i].Find("p").ToList();Film item = new Film();item.Num = i + 1;//排名item.Actor = infor[1].InnerHtml().Trim().Remove(0, 3);//演员item.Time = infor[2].InnerHtml().Trim().Remove(0, 5);//上映时间List<IHtmlElement> s = infor[3].Find("i").ToList();item.Score = s[0].InnerHtml() + s[1].InnerHtml();//评分IHtmlElement a = infor[0].Find("a").ToList()[0];//获取影片urlitem.Name = a.InnerHtml().Trim();//名称//具体电影对应网页url = "https://maoyan.com" + a.Attribute("href").AttributeValue;IHtmlDocument temp = GetHtmlDocument(url);List<IHtmlElement> t = temp.Find("li.ellipsis").ToList();item.Type = t[0].InnerHtml();//类型List<IHtmlElement> b = temp.Find(".dra").ToList();item.Introduction = b[0].InnerHtml();//介绍result.Add(item);}return result;
}
4. 得到Markdowm
格式化输出文本的方法。
private void btnSpider_Click(object sender, EventArgs e)
{List<Film> lst = FilmHtmlDocument.GetFilms();string str = Environment.NewLine;for (int i = 0; i < lst.Count; i++){str += lst[i] + Environment.NewLine+ "广告" + Environment.NewLine;}
}
5. 把Markdowm
格式的文本渲染成HTML
格式的文本。
好了,到这里就基本介绍完毕了。
我每天更新的“猫眼电影:「热映口碑」与「国内票房」综合评价榜” 就是这样完成的,避免了Ctrl+C
和Ctrl+V
的尴尬,提升了工作效率,当然“实时票房”和“总票房”的数据“猫眼电影”进行了加密,我在后面会用另外一篇图文来介绍这两个数据的获取。
是不是很有趣,你也来试试吧!See You!
参考图文:
- 如何做一款「桌面版百度翻译」软件
- 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
- 七天学会「股票数据分析软件」的开发(上)
- 七天学会「股票数据分析软件」的开发(中)
- 七天学会「股票数据分析软件」的开发(下)
相关文章:
【Java学习笔记之五】java数组详解
数组 概念 同一种类型数据的集合。其实数组就是一个容器。 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素。 格式1: 元素类型[] 数组名 new 元素类型[元素个数或数组长度]; 示例:int[] arr new int[5]; 格式2&…

参加Java培训需要注意什么
java编程语言对于零基础的同学来说,想要自学是非常困难的,因为java学习包含很多阶段,所以零基础的小白和初学者报java培训班学习是非常有必要的,下面小编就给大家详细的介绍一下参加Java培训需要注意什么? 参加Java培训需要注意什…

写得不错的几篇C/C++博客
转:http://blog.csdn.net/rubyzhudragon/category/562309.aspx 转载于:https://www.cnblogs.com/xinzhuangzi/archive/2010/08/22/4100543.html

股市币市:数据分析与交易所最新公告(20190228)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

优化webpack配置
happypack happypack可以加快rebuild的速度 在开发的时候,需要将babel-loader替换成happypack/loader{test: /\.(js|jsx)$/,exclude: /(node_modules|vendor)/,loader: isDev ? happypack/loader : babel-loader } 同时添加插件, 根据需要定义不同的babel配置&…

Java多线程学习处理高并发问题
在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将…

防止表单多次提交
防止表单多次提交 //jQuery①<script type"text/javascript"> $("input:submit").each(function() { var srcclick $(this).attr("onclick"); if(typeof(srcclick)"function"){ $(this).click(function() { if (srcclick()) { …

Visual Studio环境变量使用实例:使用环境变量来组织project
前言 在前一篇文章Visual Studio中的环境变量(以Visual Studio 2013为例)中介绍了VS中的环境变量,本文将以实际样例说明怎样合理使用这些环境变量来组织VCproject。使用vs环境变量来组织project 通常一个解决方式包括多个项目。这些项目相互之间可能存在依赖关系。以…

股市币市:数据分析与交易所最新公告(20190301)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

Python常用6个技术网站汇总分享!
Python是一门面向对象的编程语言,它具有丰富和强大的库,能够把用其他语言编写的各种模块轻松地联结在一起,因此也常被称为“胶水语言”。Python技术会随着互联网的不断发展一直迭代和更新,所以需要Python开发的人员一直保持一个学…

devstack —— 单机部署 OpenStack 体验
2019独角兽企业重金招聘Python工程师标准>>> devstack 是一个用来快速部署 OpenStack 的脚本。 使用非常简单,执行 ./stack.sh 即可,但是在安装过程中遇到一些问题会中断,通过不断修正尝试,事后在这里记录一下…

使用ultraedit和cl编译器打造简易c/c++开发环境
在visual c下,每编写一个简单的小程序,就得生成一大串中间文件,另人十分的不爽。下面提供一个新的编写c/c程序的方法: (1),下载utraledit-32编辑器,推荐v11. (2&a…

股市币市:数据分析与交易所最新公告(20190302)
BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https://coinmarketcap.com/currencies/bitcoin/ 数字货币交易所公告 BigOne 2019/03/01 BigONE 用户体验月:有奖寻建议 ,重金找 BUG …

分享五款java学习辅助工具,总有你用的上的~
想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1、Eclipse Ecli…

如何利用 C# 爬取「猫眼电影专业版:票房」数据!
在现代生活中,看电影已经成为大家的一种休闲方式。 前几天,我们介绍了 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!,通过这份“热映口碑”榜单,我们可以看到大家对当前热播电影的评价&#x…

MOSS的CSS样式说明,一个老外总结的
MOSS的CSS样式说明,一个老外总结的 http://www.heathersolomon.com/content/sp07cssreference.htm 转载于:https://www.cnblogs.com/greeny/archive/2010/09/03/1817027.html

什么是整型?Python整型详细介绍
整数类型(int)简称整型,它用于表示整数,例如,100、2016等。整型字面值的表示方式有四种,分别是十进制、二进制(以“0B”或“0b”开头)、八进制(以数字“0”开头)和十六进制(以“0x”或“0X”开头)。 Python的整型可以表示的范围是…

hibernate.hbm2ddl.auto的value
Hibernate 配置参数hibernate.hbm2ddl.auto Hibernate中的配置文件: <properties> <property name"hibernate.hbm2ddl.auto" value"create" /> </properties> 参数说明: validate 加载hibernate时…

linux的管道
1 管道的本质是进程间通信的一种手段 这个命名是非常形象的,数据从管道的一端流向管道的另外一端,然后另外一个进程等在那里,只要有数据了就进行处理。 2 管道连接的多个命令是同时启动的 也就是说,管道连接的多个命令的进程之间是…

股市币市:数据分析与交易所最新公告(20190303)
BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https://coinmarketcap.com/currencies/bitcoin/ 产品进程 赚钱是刚需,如何正确的交易股票?「股票数据分析软件」的开发(上&…

零基础怎么学习web前端开发
零基础怎么学习web前端开发?web前端在移动互联网行业的运用是非常广泛的,而且web前端开发技术所涵盖的知识有很多,具体要怎么学习,来看看小编下面的详细介绍吧。 零基础怎么学习web前端开发?对零基础学员来说, web前端要学习的知…

【DocFX文档翻译】DocFX 入门 (Getting Started with DocFX)
DocFX 入门 1. DocFX 是什么? DocFX 是一个基于.NET的API文档生成器,当前支持 C# 和 VB。 它可以通过你的代码中的三斜杠注释生成 API 参考文档。同样也支持你使用 Markdown 文件创建一些其他的主题文档(例如:教程以及使用手册&am…

在Ubuntu上安装Snort入侵检测系统。
转载于:https://www.cnblogs.com/onlyzq/archive/2010/09/10/1823079.html

一份来自山东院校的考研调剂系统已开放名单!
距离 19 考研初试成绩的公布已经有一段时间了,成绩不错的同学就安心准备复试吧,全力备考,一定要拿到属于你的录取通知书!成绩不满意,擦线或者排名靠后的同学,复试、调剂两手准备,注定咱们要花更…

适合初学者学java技术的书籍推荐!
想要学会java技术,光靠听课是不够的,看书也是非常重要的一步,以下小编为大家推荐的是适合初学者学java技术的书籍,希望能够给初学者们带来帮助。 适合初学者学java技术的书籍推荐! 1. Java编程思想(第4版) 本书赢得了全球程序员的…

ref和out的区别
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中…

如何利用 C# 爬取「当当 - 计算机与互联网图书销量榜」!
前段时间我们介绍了如何利用 C# 语言来爬取“京东 - 计算机与互联网图书销量榜” 网页的方法,通过该方法,我们能够获得“京东”的图书销售排行榜数据。 可是,读书相当于给我们的大脑喂料,只有输入的是精华,才会有更好…

【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
foreach语句使用总结增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的. part3当然还是循环体. foreach语句是java5的新特征之一,在遍历数组、集合方面&…

参加软件测试培训需要学什么技术
软件测试这项技术在几年可谓是风头正盛,很多人都想要跳槽到这个行业,那么就需要学会软件测试技术,那么目前参加软件测试培训需要学什么技术呢?来看看下面的详细介绍吧。 参加软件测试培训需要学什么技术? 每个软件在上线之前都离不开重重测…

程序集和应用程序域
这两个概念是DotNet程序员经常见到的,但好多人搞不清它们。虽然MSDN对它们有相关的说明,但并不是那么容易看懂。在这里灰灰虫根据自己的理解用简单易懂的语言解绍一下它们。程序集(assembly) “程序集是包含编译好的、面向.NET Framework的代码的逻辑…