《权力的游戏》最终季已于近日开播,对于全世界翘首以待的粉丝们来说,其最大的魅力就在于“无法预知的人物命运”。那些在魔幻时代的洪流中不断沉浮的人们,将会迎来怎样的结局?近日,来自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大本营编译文章,转载请)








