从python调用url时获取“错误”页面源

发布于 2021-01-29 16:56:57

尝试从网站检索页面源时,与通过Web浏览器查看同一页面源时,我得到了完全不同(且更短)的文本。

这位研究员有一个相关问题,但获得了主页源而不是所请求的源-我得到的是完全陌生的东西。

代码是:

from urllib import request

def get_page_source(n):
    url = 'https://www.whoscored.com/Matches/' + str(n) + '/live'
    response = request.urlopen(url)
    return str(response.read())

n = 1006233
text = get_page_source(n)

这是我在此示例中定位的页面:https :
//www.whoscored.com/Matches/1006233/live

有问题的URL在页面源代码中包含丰富的信息,但是在运行上述代码时,我最终仅获得以下信息:

文字=

b'<html style="height:100%"><head><META NAME="ROBOTS" CONTENT="NOINDEX,
NOFOLLOW"><meta name="format-detection" content="telephone=no"><meta 
name="viewport" content="initial-scale=1.0"><meta http-equiv="X-
UA-Compatible" content="IE=edge,chrome=1"></head><body style="margin:0px;
height:100%"><iframe src="/_Incapsula_Resource?CWUDNSAI=24&
xinfo=0-12919260-0 0NNY RT(1462118673272 111) q(0 -1 -1 -1) r(0 -1) 
B12(4,315,0) U2&incident_id=276000100045095595-100029307305590944&edet=12&
cinfo=04000000" frameborder=0 width="100%" height="100%" marginheight="0px" 
marginwidth="0px">Request unsuccessful. Incapsula incident ID: 
276000100045095595-100029307305590944</iframe></body></html>'

这里出了什么问题?即使没有发送重复请求,服务器也可以检测到机器人(如果是,如何发送),并且有办法解决吗?

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这里有几个问题。根本原因是您要抓取的网站知道您不是真实的人,并且正在阻止您。许多网站只是通过检查标头以查看请求是否来自浏览器(机器人)来执行此操作。但是,此站点看起来像他们在使用Incapsula,旨在提供更复杂的保护。您可以尝试通过设置标头来不同地设置您的请求,以欺骗页面上的安全性-
    但我怀疑这样做是否可行。

    import requests
    
    def get_page_source(n):
        url = 'https://www.whoscored.com/Matches/' + str(n) + '/live'
        headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
        response = requests.get(url, headers=headers)
        return response.text
    
    n = 1006233
    text = get_page_source(n)
    print text
    

    该网站似乎还使用了验证码-旨在防止网页抓取。如果网站正在努力防止刮擦-这很可能是因为它们提供的数据是专有数据。我建议您找到另一个提供此数据的站点-
    或尝试使用官方API。

    不久前即可查看此答案。好像whoscored.com使用OPTAAPI来提供信息。您也许可以跳过中间人,直接进入数据源。祝好运!

    UEFA或FIFA似乎没有提供任何API来获取您想要的信息。但是,有一些第三方服务支持该功能:

    OPTA-商业和免费。他们有关于比赛的不可思议的数据库。Whoscored.com当前正在使用它。

    其他:排行榜,xmlsoccer,…



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看