如何使用 Python 阅读没有 .htm* 扩展名的网页?

How to read webpages that are without .htm* extension using Python?

我经常使用 urllib2 库来解析 python 中的网页。 通常,URL 的格式为:

page_url = 'http://www.website.com/webpage.html'

我用这个来解析页面:

import urllib2

def read_page_contents(url):
    try:
        request = urllib2.Request(url)
        handle = urllib2.urlopen(request)
        content = handle.read()
    except:
        # aded as suggested by contributers below:
        import traceback
        traceback.print_exc()
        content = None
    return content

page = read_page_contents(page_url)
if page is not None:
    # start dealing with page contents
    pass

这没有问题,但是当我尝试一个没有 html 扩展名的 URL 时,如下所示, page_url = 'https://energyplus.net/weather-region/north_and_central_america_wmo_region_4'

此方法失败读取页面,它总是returnsNone!和一条错误消息

raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden:

我搜索了 Whosebug,但是,根据我的关键字,我没有找到任何有用的东西!

请帮我解决这个问题。

提前致谢

------------

我找到了答案,感谢以下 2 位贡献者的帮助:

导入请求

def read_page_contents(url):
    try:
        request = requests.get(url)
        content = request.content
    except:
        # aded as suggested by contributers below:
        import traceback
        traceback.print_exc()
        content = None
    return content

这与您的 url 中没有 .html 无关。您的代码本身相当混乱。一个位置有 page_url,另一个位置有 continent_url。所以你将无法执行这段代码。我假设这是一个复制粘贴问题。你的代码中真正的错误是这个

except:
    content = None

永远不要这样做。如果你有一个通用的捕获所有异常,你绝对必须记录

except:
   import traceback
   traceback.print_exc()
   content = None

您将看到您尝试检索的页面存在真正的问题(最终证明是权限问题)。

使用 requests 并节省您的时间来做更有意义的事情。

import requests

url = 'https://energyplus.net/weather-region/north_and_central_america_wmo_region_4'
r = requests.get(url)

输出:

r.status_code: 200