抓取php网页源码(抓取googleplay全球12国的游戏TOP排名要怎么做)

优采云 发布时间: 2021-09-16 13:15

  抓取php网页源码(抓取googleplay全球12国的游戏TOP排名要怎么做)

  上一篇博客讨论了Linux获取网页的方式,包括curl和WGet。这篇博客将关注Linux抓取网页的例子——在谷歌游戏的12个国家中抢占游戏排行榜的第一名

  要捕获Google play games的排名页面,首先分析页面的特点和规律:

  1、google游戏排名页面采用“总分”的形式,即一个网站页面显示多个排名(如24),多个这样的页面构成所有游戏的总排名

  2、点击网站每页上的每个游戏连接,查看游戏的属性信息(如星级、发布日期、版本号、SDK版本号、游戏类别、下载量等)

  需要解决的问题:

  1、如何获取所有游戏的总排名

  2、在捕获总排名后,如何拼接URL以捕获每个单独的游戏网页

  3、捕获每个游戏网页后,如何提取网页中游戏的属性信息(即评估星、发布日期…)

  4、how to save(MySQL)、生成日报(HTML)和在提取每个游戏的属性信息后发送日报(电子邮件)

  5、根据捕获的游戏属性信息资源,如何查询您公司的游戏排名(JSP)以及如何清晰显示游戏排名(JfreeChart)

  6、更困难的是谷歌游戏排名中没有全球统一的排名。谷歌采用本地化策略。几十个国家都有自己的排名算法和规则。如何实现12国比赛排名

  设计方案及技术选择

  在分析了上述问题和需求后,如何逐一解决并逐一突破,是我们需要思考、设计和解决的问题(模块流程和技术实现)

  基于以上问题,将逐一进行以下模块设计和技术方案选择:

  

  1、为了获取12个国家的游戏排名,我们需要在12个国家租用代理服务器来获取各个国家的游戏排名(12个国家的游戏排名算法和语言不同,包括中文、英文、日文、俄文、*敏*感*词*文……)

  2、抓取网页并使用curl+代理;提取下载的网页信息并使用awk文本分析工具(您需要充分了解HTML语法、标记、ID和其他元素,才能使用awk准确提取游戏属性信息)

  3、由于IP代理屏蔽系统、网页程序捕获、游戏属性信息提取等模块都是通过脚本完成的,为了保持程序语言的一致性,数据库的创建和记录插入也是通过shell脚本实现的

  4、捕获的每个游戏属性信息都以网页的形式以HTML+表格的形式显示,清晰直观。Shell脚本用于拼接HTML字符串(Table+tr+TD+info)

  5、生成的HTML网页每天定期以电子邮件的形式发送给产品总监、PM、RD和QA,以了解公司发布的游戏排名以及世界上增长最快、最热门的游戏趋势

  6、开发一个JSP网页查询系统,根据输入的游戏名称或游戏包名称查询游戏的排名和趋势,并在趋势图下显示游戏的所有详细属性信息

  模块技术实现

  1、IP代理过滤

  考虑到成本,每个国家租用一台代理服务器(VPN)。按最低市场价格1000元/月计算,每年为12000元。12个国家的总成本为12x12000=144000,即需要约140000元/年的VPN租赁成本

  基于成本的考虑,后来,通过对代理服务器和免费IP的深入调查,提出设计开发一套免费IP代理服务器筛选系统,分别捕获12个国家的游戏排名

  免费代理IP主要来自两个网站:和

  由于文本预处理和过滤逻辑实现的复杂性,IP代理过滤系统将在下一篇博客中单独介绍

  2、grab排名页面

  仔细分析Google play game排名页面后,我们可以发现有一些规则需要遵循:

  第1页Top24网站:

  第2页top48网站:

  第3页top72网站:

  到目前为止,查看每个页面上URL的最后一个字符串?开始=24&Num=24,你找到规律了吗?事实上,第一页上的页面以start=0开头,也可以写成:

  第1页Top24网站:

  根据以上规则,您可以使用curl+proxy通过循环和拼接字符串(start='expr$start+24')来获取排名网页

  3、extract游戏链接

  排名页面,每个页面收录24个游戏URL超链接,如何提取这24个游戏URL超链接

  当时考虑了XML解析,因为html是一种分层组织的类似XML的格式,但有些网页并非都是标准的html格式(例如,左括号后没有右括号闭合),这将导致XML解析失败

  后来,结合我的HTML和JS知识,我分析了排名页面的内容结构,发现每个游戏链接前面都有一个独特的class=“title”。具体格式如下(以篮球投篮为例):

  Basketball Shoot

  这样,class=“title”附近的文本内容可以通过awk成功提取。具体实施情况如下:

<p># split url_24

page_key='class="title"'

page_output='output_page.log'

page_output_url_start='https://play.google.com/store/apps/'

page_output_url='output_top800_url.log'

function page_split(){

grep $page_key $(ls $url_output* | sort -t "_" -k6 -n) > tmp_page_grepURL.log # use $url_output

awk -F'[]' '{for(i=1;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线