爬取绝地求生玩家数据

爬取网站网址:
https://pubg.op.gg/
爬取网站界面在这里插入图片描述
下图为其中一个玩家的数据
在这里插入图片描述
后台代码分析:
在这里插入图片描述
ubg.op.gg的 Web抓取工具
在这个文件中,我将向您介绍我为此Web爬虫编写的整个代码。我在每个文件中都没有太多的文档,因为如果你做了任何拼贴,会发现它们中的大多数都是单调乏味的。因此,我将介绍这个项目的想法并澄清这个文件中的一些代码。

在详细介绍之前,请检查您的计算机上是否安装了Python 3.6,因为我使用的是Python 3.6。如果你有Python 3.6,你可以继续安装依赖项。

点击安装bs4
pip install lxml

组成
整个项目由四个独立的文件组成,其中三个是功能文件,剩下的一个是简单的包装器。

main.py
这是一个简单的包装器。请记住用真正的 PUBG用户ID 替换zsda123 (第13行)

finder.py
这在整个项目中起着重要作用,因为你会在随机的十六进制数中找到pubg.op.gg中每个玩家的userID 。但是,我仍然设法在先前版本的finder.py中找到一个模式:

UserID具有类似群集的分发。在每个群集中,有40到80个用户。
我让我的服务器运行了一整天,除了启动之外无法捕获任何集群。因此,我决定放弃这种野蛮的方式。然后,我决定采用这种新方式:

使用user0查找同一游戏中的其他玩家,在本例中为zsda123。如果要捕获更大的样本,请将第73行更改为以下内容。

q = nameToId(userMap(userMap(q)))
通过两次调用userMap,我能够捕获4970个不同的用户,这花了我一个小时。数据的大小呈指数级增长!假设每个游戏中有80个玩家,你决定3次调用userMap。您应该期望您的服务器按比例工作到512,000个用户,这可能会耗尽服务器/ PC的所有内存。请注意这一点!

让我们更多地谈谈文档。在第19行和第42行中,查询变量服务器设置为as。如果您愿意,可以将其更改为其他服务器。

在第28行,请记住将该值更改为真正的op.gg播放器ID。我有这条线的原因是有时出现名为#unknown的玩家,由于他们的垃圾服务器。我会告诉你如何找到一个玩家ID。

转到pubg.op.gg
搜索真正的PUBG播放器用户名
等待整个网页完全加载
检查网页并转到“网络”部分
一直滚动到底部,然后单击“更多”
您应该能够看到最近的请求?
检查请求URL,播放器ID是https://pubg.op.gg/api/users/之后的字符串
在第40行中,不要忘记将executable_path更改为驱动程序的路径。在El Capitan之后,Mac用户无法再访问/ usr / bin。您可以将驱动程序放在/ usr / local / bin下,并像我所做的那样更改executable_path。此外,您必须在您的计算机上安装该浏览器,这意味着如果您没有Firefox并使用geckodriver,您将收到一堆警告!此外,如果您使用Firefox,请进行更改。

driver = webdriver.Firefox(executable_path = “ / usr / local / bin / geckodriver ”)
在第44,45,46行,你会看到一大堆代码。别担心,我没有打字。如果我这样做,我会生气的。它是由Chrome的插件Xpath Finder生成的。第44行用于选择等级低于10的游戏,用于前10场比赛的第45行和用于鸡肉晚餐的第46行。通过单击这些按钮,游戏详细信息将加载到网页中。由于它是异步的,我让机器等待一段时间(2被测试不稳定,所以我用3秒钟)。

文件的其余部分基本上是一些美丽的汤,我相信这部分不需要进一步的解释。

scraper.py
我想解释为什么我在第46行有一个try语句。有些用户他们只是不玩独奏游戏,所以我们无法从那里获得任何数据。此外,您可以更改传递给query()的参数以提取不同的内容。除此之外,我们还有另一堆美味的汤。

reader.py
我收集的数据非常原始,所以我也有一个简单的读者来总结我的数据。

[userId,x [ ’ participant ’ ] [ ’ user ’ ] [ ’ nickname ’ ],x [ ’ season ’ ],x [ ’ server ’ ],
x [ ’ queue_size ’ ],x [ ’ mode ’ ],x [ ‘参与者’ ] [ ‘统计’’ [ ‘战斗’ ] [ ’ kda ’ ] [ ‘杀死’ ]]
如果你要求的东西比我在项目中做的更复杂,我会在这里谈谈你。回想一下,我在finder部分讨论了Request URL。如果您访问请求URL,您将看到这样的JSON对象。

{ “ params ”:{ “ server ”:“ na ”,“ season ”:null,“ queue_size ”:0,“ mode ”:“ tpp ” },
“ matches ”:{ “ summary ”:{ “ matches_cnt ”:20,“ win_matches_cnt ”:1,“topten_matches_cnt “:7,” ranks_avg “:16.95,
” ranks_list “:[ 6,24,18,43,42,14,11,16,3,1,29,7,19,18,2,12,9,2,16,47 ],
“kills_avg “:2,” deaths_avg “:0.95,” kills_max “:6,” damage_avg “:230.261890915,
” time_survived_avg “:964.2993499999999,” modes “:{ ” 2 “:{ ” matches_cnt “:5,” win_matches_cnt “:0,“topten_matches_cnt “:1,
“ rating_delta_sum ”:4.185349880000004 },“ 4 ”:{ “ matches_cnt ”:13,“ win_matches_cnt ”:0,“ topten_matches_cnt ”:5,
“ rating_delta_sum ”:10.264028235999994 },“ 1 ”:{ “ matches_cnt ”:2,“win_matches_cnt “:1,“ topten_matches_cnt ”:1,
“ rating_delta_sum ”:151.97761028000002 }}},“ items ”:[{ “ season ”:“ 2017-pre6 ”,“ server ”:“ na ”,“ queue_size ”:2,“ mode ”:“ tpp ”,
“started_at “:”2017-12-06T03:27:29 + 0000 “ ” total_rank “:42,”偏移量“:101,
” match_id “:” 2U4GBNA0YmnSRjFPiSEp6LaN-bpuG8kRbg6Rdt5PZpPKmHyludByUMHwbLTOzeEO “ ”参与者“:{ ” _id “:” 5a276bd059e73b0001e5b828 “ ”用户“:{ ”昵称“:” LexWynnZzWw “,
“profile_url “:” https:\ / \ / pubg.op.gg \ / user \ / LexWynnZzWw?server = na “ },” stats “:{ ” rank “:6,
” rating_delta “:40.009836480000004,” combat “:{ “ time_survived ”:1802.317,“ vehicle_destroys ”:0,
“ win_place ”:6,“ kill_place ”: 4, “治愈”: 5, “ weapon_acquired ”: 9, “增强”: 4, “ death_type ”: “ byplayer ”,
“ most_damage ”: 0, “ kda ”:{ “杀死”: 4, “协助“: 2,“kill_steaks “:1,” road_kills “:0,” team_kills “:0,” headshot_kills “:2,
” longest_kill “:49.3916779 },” distance_traveled “:{ ” walk_distance “:2522.22559,” ride_distance “:3938.64038 },
”伤害“:{ ”造成的伤害“: 482.832336 }, ” DBNO “:{ ” knock_downs “: 2, ”苏醒“: 0 }}}},
”团队“:{ ” _id “: 24, ”统计“:{ ”秩“: 6 }, ”参与者“:[]}}

]}}
你可以从那里解析对象并从中获得一些有趣的东西。

userIdList.txt
Windows计算机上的以下文件可能会很混乱。如果您有* nix机器,您应该在此文件中看到类似的内容。

5a3befa88676120001104e8d
5a307bafc284c1000169e7db
59feb54368c1ea00019c056b
5a0c5e93f0eb7800013cd191

log.txt的
你还记得我谈过Player #unknown吗?您总是可以在日志文件中找到有趣的内容。我在Finder中呈现的最后一条消息恰好是#unknown。整体日志应该是这样的。

Master: START–START–START–START–START
Finder: Starting with User YechenDetoxic…
Finder: Collecting Friends of User YechenDetoxic…
Finder: Collecting Friends of User ashingboomORZ…
Finder: Collecting Friends of User Thinktomuch…
Finder: Collecting Friends of User miaomiao-3-…
Finder: Collecting Friends of User dujun211…
Finder: Collecting Friends of User SUSHAOLEI…

Finder: Translating User kanchao_ge…
Finder: Translating User QingFeng141…
Finder: Translating User Clearloveccp…
Finder: Translating User 980010…
Finder: Translating User with164…
Finder: Translating User E-RomanA…
Finder: Translating User #unknown…

Finder: DONE!!
Time Used: 3866 seconds
User Captured: 4941
Scraper: Scraper Starts
Scraper: Working on User 5a0c5e93f0eb7800013cd191
Scraper: Working on User 5a0bed2905279f00011d10f5
Scraper: Working on User 5a2e49d4e358310001185431
Scraper: Working on User 59fd962cab1fff00019e0759
Scraper: Working on User 59fdb0a699392b0001608809
Scraper: Working on User 59fd958031e4c1000157b475
Scraper: Working on User 59fe352cb503ad0001f16526

Scraper: DONE!!
Time Used: 15435 seconds
Reader: Reader Starts
Reader: DONE!!
Time Used: 0 seconds
Master: DONE–DONE–DONE–DONE–DONE
data.csv
您应该看到以这种格式收集的数据:

Player ID Username Season Server Queue_Size Mode Kills
59fd96dddfa2830001fb24aa Kev666-- 2018-01 sea 1 tpp 9
59fd96dddfa2830001fb24aa Kev666-- 2018-01 sea 1 tpp 0
59fd96dddfa2830001fb24aa Kev666-- 2018-01 sea 1 tpp 0
59fd96dddfa2830001fb24aa Kev666-- 2018-01 sea 1 tpp 0
59fd96dddfa2830001fb24aa Kev666-- 2017-pre6 sea 1 tpp 1
59fd96dddfa2830001fb24aa Kev666-- 2017-pre6 sea 1 tpp 3
59fd96dddfa2830001fb24aa Kev666-- 2017-pre5 sea 1 tpp 0

result.csv
你应该看到这样的摘要:

kills Frequency Relative Frequency
0 158768 0.574224839
1 62972 0.227754249
2 27958 0.101117215
3 13143 0.047535001
5 3330 0.012043792
6 1776 0.006423356
4 6399 0.02314361
8 515 0.001862628
7 945 0.003417833
10 175 0.000632932
12 45 0.000162754
9 285 0.001030775
11 91 0.000329125
14 26 9.40E-05
26 1 3.62E-06
15 9 3.26E-05
13 35 0.000126586
16 4 1.45E-05
18 3 1.09E-05
17 7 2.53E-05
29 1 3.62E-06
20 1 3.62E-06
19 2 7.23E-06

本帖如果涉及到任何侵权请联系本人删除
联系电话+86-15962207069
成都东软学院Python结课作业
王陆冰

猜你喜欢

转载自blog.csdn.net/newbieWLB/article/details/85756810