【问题标题】:WinError 10054 in tutorial for APIsAPI 教程中的 WinError 10054
【发布时间】:2020-04-01 08:50:50
【问题描述】:

我正在尝试使用 python 获取 xml 数据的课程,但即使我按照教程进行操作,我仍然收到 10054 错误。我做错了什么?

    from bs4 import BeautifulSoup as soup
    from urllib.request import urlopen
    url = 'https://ehp.qld.gov.au/cgi-bin/air/xml.php?category=1&region=ALL'
    url_result = urlopen(url)
    raw_data = url_result.read()
    xml_soup = soup(raw_data, 'xml')    
    print(xml_soup)

这是我尝试运行代码时的错误。

ConnectionResetError                      Traceback (most recent call last)
<ipython-input-2-76e557f468e2> in <module>
      1 url = 'https://apps.des.qld.gov.au/air-quality/xml/feed.php?category=1&region=ALL'
----> 2 url_result = urlopen(url)
      3 raw_data = url_result.read()
      4 xml_soup = soup(raw_data, 'xml')
      5 print(xml_soup)


~\anaconda3\lib\ssl.py in read(self, len, buffer)
    927         try:
    928             if buffer is not None:
--> 929                 return self._sslobj.read(len, buffer)
    930             else:
    931                 return self._sslobj.read(len)

ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

【问题讨论】:

  • 表示主机已经关闭了你的连接。可能有很多原因,最可能的原因是您需要通过在请求中提供标头信息来欺骗用户代理。
  • 我在 jupyterlab 中运行它,我正在遵循的教程显示了这个确切的代码和设置工作。

标签: python xml api beautifulsoup


【解决方案1】:

问题是您没有在请求中提供用户代理信息。即使您可能正在学习使代码正常工作的教程,该网站也可能已更改/更新。

我在没有用户代理的情况下尝试了您的代码,并且遇到了与您相同的错误,但是在欺骗了用户代理后,请求成功了。

>>> from urllib.request import urlopen, Request
>>> url = 'https://ehp.qld.gov.au/cgi-bin/air/xml.php?category=1&region=ALL'
>>> req = Request(url)
>>> req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0')
>>> url_result = urlopen(req)

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 2020-03-06
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多