当前位置: 首页 > 知识库问答 >
问题:

Python的请求库超时,但从浏览器获得响应

谷梁永年
2023-03-14

我正在尝试为NBA数据创建一个网络刮板。当我运行以下代码时:

import requests

response = requests.get('https://stats.nba.com/stats/leaguedashplayerstats?College=&Conference=&Country=&DateFrom=10%2F20%2F2017&DateTo=10%2F20%2F2017&Division=&DraftPick=&DraftYear=&GameScope=&GameSegment=&Height=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=Totals&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2017-18&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight=')

请求因错误而超时:

文件“C:\ProgramData\Anaconda3\lib\site packages\requests\api.py”,第70行,在get返回请求中('get',url,params=params,**kwargs)

文件“C:\ProgramData\Anaconda3\lib\site packages\requests\api.py”,第56行,在请求返回会话中。请求(方法=方法,url=url,**kwargs)

文件“C:\ProgramData\Anaconda3\lib\site packages\requests\sessions.py”,第488行,request resp=self。发送(准备,**发送)

在发送r=adapter.send(请求,**kwargs)中,文件"C:\Program Data\Anaconda3\lib\site-包\请求\sessions.py",第609行。

文件“C:\ProgramData\Anaconda3\lib\site packages\requests\adapters.py”,第473行,在send-raise-ConnectionError(err,request=request)中

连接错误:('连接中止.', OSError("(10060,'WSAETIMEDOUT')",))

然而,当我在浏览器中点击相同的网址时,我得到了一个响应。

共有3个答案

国兴贤
2023-03-14

如果其他标题不起作用,试试这个标题,它对我来说效果很好。

headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15","Accept-Language": "en-gb","Accept-Encoding":"br, gzip, deflate","Accept":"test/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Referer":"http://www.google.com/"}

已从此链接收集这些标题

龙洛城
2023-03-14

如果仍然不工作,请使用此标头:

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'en-US,en;q=0.9,hi;q=0.8'}
龙俊德
2023-03-14

看起来您提到的网站正在检查请求标题中的“用户代理”。您可以在请求中伪造“用户代理”,使其看起来像来自实际浏览器,您将收到响应。

例如:

import requests
url = "https://stats.nba.com/stats/leaguedashplayerstats?College=&Conference=&Country=&DateFrom=10%2F20%2F2017&DateTo=10%2F20%2F2017&Division=&DraftPick=&DraftYear=&GameScope=&GameSegment=&Height=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=Totals&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2017-18&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight="

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
# it's the user-agent of my browser ^ 

response = requests.get(url, headers=headers)
response.status_code    # will return: 200

response.text      # will return the website content

您可以从这里找到浏览器的用户代理。

 类似资料:
  • 问题内容: 浏览器是否内置了超时功能,如果可以,它们是什么? 我有一个页面,该页面在最多运行5分钟的进程上执行AJAX调用。有人说浏览器在2分钟后超时,但不知道这有什么道理。 问题答案: 它取决于浏览器。“默认情况下,InternetExplorer的KeepAliveTimeout值为一分钟,其他限制因素(ServerInfoTimeout)为两分钟。这两种设置都会导致InternetExplo

  • 问题内容: 当服务器由于超时而没有响应时,我偶尔遇到重试POST请求的情况。所有现代浏览器都对幂等请求(GET,HEAD等)具有重试逻辑,但是我无法推断出为什么它对POST请求会发生。 我正在使用具有3条路由和chrome浏览器的简单node.js服务器测试这种情况。 默认情况下,node.js http服务器在2分钟后使请求超时。 retry.js 运行 1个 2 从开发控制台,使用jquery

  • 我在尝试使用JsTestDriver捕获浏览器时遇到此错误: 基本上,我正在做的是以下内容: > 使用以下命令启动 JsTestDriver 服务器: java-jarJsTestDriver-1.3.5.jar--port 9876 然后,我尝试用以下代码捕获浏览器: nohup./phantomjs phantomjs-jstd.js 最后,我尝试使用以下命令运行测试: Java-jar js

  • 我正在使用jQuery的方法向我的Elastic的API发出请求。 在查询中传递参数时,一切都很好: 在正文(json)中传递参数时,问题开始出现: 浏览器(Chrome)不发送请求,而是发送请求。 阅读jQuery的留档我看到: 对于跨域请求,将内容类型设置为Application/x-www-form-urlencoded、multipart/form-data或text/平原以外的任何内容都

  • 做这件事的好方法是什么?