美诚资源网

《权力的游戏》最终季上线!用Python分析谁是你最喜爱的演员

admin 190

《权力的游戏》最终季已于近日开播,对于全世界翘首以待的粉丝们来说,其最大的魅力就在于“无法预知的人物命运”。那些在魔幻时代的洪流中不断沉浮的人们,将会迎来怎样的结局?近日,来自Medium上的一位名叫RockyKev的小哥哥利用Python通过《权力的游戏》粉丝网站收集最喜爱演员的照片。结果是怎样的是其次的,关键是过程,用他的话来讲,“非常enjoy!”

文中,他主要分享了一些关于Python库的使用,包括:通过Selenium库实现Web自动化,并通过BeautifulSoup库进行Web抓取,生成CSV模块的报告,类似于采用Python工具模拟整个Pandas/DataScience方面的功能。

他还指出,读者不需要任何的Python经验,他已经详细解释了这些代码。而他自己也不是一名Python专家,仅仅学习了几周的Python知识,就写出了这些代码。在他看来,“Python是一种通用的编程语言,它具有严格的类型、解释,并且因其易读性和优异的设计原则而出名。”

如简单对比下JavaScrip与Python语法区别:

Python使用缩进和大括号。

Python使用基于类的继承,因此它更像C语言,而JavaScript可以模拟类。

Python也是一种强类型,没有类型混合。例如,如果同时添加一个字符串和一个Int类型的数据,它就会报错。

同样,他也为大家提前奉献了自己常用的Python免费资源,比如AutomatatheBoringStuff、PythonforBeginners,以及等,都可以在网上搜集到。

本篇将主要分为三部分,以下内容选自该博客:

一、Web自动化

使用Python最酷的事情之一就是实现Web自动化。例如,你可以使用如下思路来编写一个Python脚本:

1、打开浏览器

2、自动访问特定网站

3、登录该站点

4、转到该网站的另一页面

5、查找最新的博文

6、打开那篇博文

8、最后退出网站

不过,Web自动化同样也可以应用在:

自动化创建网站账户。

在线课程中,从头到尾自动化监控。

我们将做什么?

对于这一部分,我们将自动化登录美剧《权力的游戏》的粉丝网站。如果我们单独去登录如、等粉丝网站,非常浪费时间。使用如下所示的模板,你可以自动登录各类粉丝网站。

代码

安装Python3、Selenium和FirefoxWeb等程序才可以开始使用。

教程:如何使用Python自动化表单提交:

GameofThroneseasyloginscriptDescription:Thiscodelogsintoallofy_=()_wait(5)implicity_waitmakesthebotwait5secondsbeforeeveryactionsothesitecontentcanloadupImportthelibrariesneededimportrequestsimporttimefrombs4importBeautifulSoupurl=';FORM=HDRSC2'GrabtheHTMLandusingBeautifulsoup=BeautifulSoup(,'')skipitifitdoesn'tstartwithhttpif"http"infull_link:print("grabbedurl:"+link)filename=str(i)+'.jpg'print("Download:"+filename)r=(link)open(filename,'wb').write()else:print("grabbedurl:"+link)print("skip")(1)Breakingdownthecode

使用Python访问网页

首先导入所需的库,然后将网页链接存到变量中。

Requesets库用于执行各种HTTP请求。

Time库用于在每个请求后等待一秒钟。

BeautifulSoup库用于更轻松地搜索DOM树。

使用BeautifulSoup解析网页

接下来,将URL地址推送给BeautifulSoup。

寻找内容

最后,使用FOR循环来获取内容。

以FOR循环开始,BeautifulSoup能快速过滤,并找到所有的img标签,然后存储在临时数组中。使用len函数查询数组的长度。

skipitifitdoesn'tstartwithhttpif"http"infull_link:print("grabbedurl:"+link)filename=str(i)+'.jpg'print("Download:"+filename)r=(link)open(filename,'wb').write()else:print("grabbedurl:"+link)print("skip")(1)

WebScraping有很多有用的函数。以上的代码在抓取网站的图像时,需要修改后才能使用。

三、生成报告和数据

收集数据很容易,但解释数据很困难。这就是为什么现在对数据科学家的需求急剧增加。数据科学家通常使用R和Python等语言进行解释。

接下来,我们将使用CSV模块。如果我们面对的是一个巨大的数据集,比如50,000行或更多,那就需要使用Pandas库。

我们需要做的是下载CSV库,让Python解释数据,根据问题查询,然后打印出答案。

对比Python与表格函数

你可能会有疑问:“当我可以轻松使用像=SUM或=COUNT这样的表格函数,或者过滤掉我不需要手动操作的行时,为什么要使用Python呢?”

与第1部分和第2部分中的所有其他自动化技巧一样,你绝对可以手动执行此操作。但想象一下,如果你每天必须生成一份新的报告。

过程案例

每年,《权力的游戏》的新闻网站都会举办疯狂三月的活动。访问者将投票选出他们最喜欢的角色,获胜者将向上移动并与另一个人竞争。经过6轮投票,宣布获胜者。

由于2019年投票仍在进行中,我们抓取了2018年6轮的数据并将其编译成CSV文件。此外,还添加了一些额外的背景数据(比如它们来自哪里),使报告内容更有趣。

不过,基于这个报告,有些问题需要考虑:

问题1:谁赢得了人气投票?

最简单的方式就是用公式把每行的数据相加,如=sum(E2:J2)

然后排序,就能得到获胜者了。

Python方法如下,

IncludethecodefromabovePasseachcharacterandtheirfinalscoreintototal_scoredictionaryforrowinfile_data:total=(int(row[4])+int(row[5])+int(row[6])+int(row[7])+int(row[8])+int(row[9]))total_score[row[0]]=total(sorted(total_(),key=itemgetter(1),reverse=True))jonsnowwinner_score=sorted_score[winner]Passeachcharacterandtheirfinalscoreintototal_scoredictionaryforrowinfile_data:total=(int(row[4])+int(row[5])+int(row[6])+int(row[7])+int(row[8])+int(row[9]))total_score[row[0]]=totalNEWCODENEWLINE-dividebyhowmanyroundsnew_total=total/int(row[2])total_score[row[0]]=new_totalPasseachcharacterandtheirfinalscoreintototal_scoredictionaryforrowinfile_data:total=(int(row[4])+int(row[5])+int(row[6])+int(row[7])+int(row[8])+int(row[9]))Passeachcharacterandtheirfinalscoreintototal_scoredictionaryforrowinfile_data:RESULT=Missandeiwith4811

问题2仅添加了一行代码。

问题3添加一个IF-ELSE语句。

importcsvMakeallblankcellsintozeroes#(row):iflen(x)1:x=row[i]=0

以上的代码流程是:

1、导入csv模块

2、导入csv文件,并转换成名为file_data的列表。

Python读取文件的方式是将数据传递给对象

然后删除头部

将对象传递给读者,最后是列表

注意:实际上,Python3中有一种更简洁的方法

3、为了可以使数据相加,作者将空白处填为了0

有了这样的设置,就可以遍历数据然后回答上述问题。

总结

第一部分介绍了如何使用Selenium库进行Web自动化,第二部分介绍了如何使用BeautifulSoup抓取Web数据,第三部分介绍了使用CSV模块生成报告。当然,这几个部分之间都有内在联系,需要读者深刻领会。

当然,学习到最后,你是否学会快速收集《权力的游戏》里最喜爱演员的照片了呢?营长先行奉上,欢迎留言互动。

马王JasonMomoa

原文地址:

(本文为AI大本营编译文章,转载请)