首先献上网址https://www.whoscored.com/Statistics,网站在关于足球信息方面的数据还是挺多的,全球各大联赛,无论是球队的还是球员的数据都有。
主要想获取的是下图的5大联赛球员数据,进入页面后就知道有异步加载的部分,那么就来看看具体的信息,请见下图,每个球员名字也是一个链接,进去后还能获得更详细的球员信息,那么要做的就是在每一页进入每一个球员链接里面爬取。
第一页的request url:https://www.whoscored.com/StatisticsFeed/1/GetPlayerStatistics?category=summary&subcategory=all&statsAccumulationType=0&isCurrent=true&playerId=&teamIds=&matchId=&stageId=&tournamentOptions=2,3,4,5,22&sortBy=Rating&sortAscending=&age=&ageComparisonType=&appearances=&appearancesComparisonType=&field=Overall&nationality=&positionOptions=&timeOfTheGameEnd=&timeOfTheGameStart=&isMinApp=true&page=&includeZeroValues=&numberOfPlayersToPick=10
这个链接最重要的参数就是page,修改page就能得到不同页面的数据,在浏览器输入该request url得到的信息:
球员页链接:https://www.whoscored.com/Players/50835/Show/Neymar
所以要构造所有球员的链接只需要知道球员ID和球员名字就好了,这两个信息可以从上图获得,然后就是抓包分析了,可以开干了!结果返回下图。。。
主要是这两个信息:,Request unsuccessful.Incapsula incident ID:……. 就是被识别出来是爬虫了,不论怎么换请求头还是换ip都是这样…
那试试能不能用selenium,如果是请求页面源码是可以显示出一两页的,再往后几页就不行了,那再试试模拟点击?情况也差不多
然后在Github查到一个相关内容:
https://github.com/ziplokk1/incapsula-cracker-py3
上面有介绍这种incapsula反爬机制,并提供了解决办法(尝试过,也解决不了)
大概就是这种机制能识别出你是否使用了selenium,phantomJS等等,每次进入页面都会生成一个对用户测试结果的cookie,然后请求会带有这个测试cookie再返回其他的cookie以获得访问网站的权限,但即使授权访问了,请求太多也会触发incapsula这种机制
除了whoscored这个网站,还有以下网站同样有这种机制:
领取专属 10元无门槛券
私享最新 技术干货