【问题标题】:Python - request module - HTTP 500 error when retrieving webpagePython - 请求模块 - 检索网页时出现 HTTP 500 错误
【发布时间】:2017-01-15 11:33:30
【问题描述】:

此代码应该下载 html 页面并将其打印到屏幕上,但我得到一个 HTTP 500 错误异常,我不知道如何管理。

有什么想法吗?

import requests ,bs4

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0'}

#Load mainPage
_requestResult = requests.get("http://www.geometriancona.it/categoria_albo/albo/",headers = headers, timeout = 20)
_requestResult.raise_for_status()
_htmlPage = bs4.BeautifulSoup(_requestResult.text, "lxml")
print(_htmlPage)

#search for stuff in html code

【问题讨论】:

    标签: python-3.x http beautifulsoup httprequest


    【解决方案1】:

    您可以使用 urllib 模块下载单个 URL,但这只会返回数据。它不会解析 HTML 并自动下载 CSS 文件和图像等内容。 如果您想下载“整个”页面,您将需要强大的 textd 来解析 HTML 并找到您需要下载的其他内容。您可以使用 Beautiful Soup 之类的东西来解析您检索到的 HTML。 This question 有一些示例代码正是这样做的。

    【讨论】:

    • 我不需要 CSS 或图像文件,只需要原始 HTML。代码应该可以工作,但对于某些网站,它会返回 500 错误。
    【解决方案2】:

    尝试使用您的匿名浏览器访问:http://www.geometriancona.it/categoria_albo/albo/,它会给出HTTP 500 Error

    因为您需要登录,不是吗?

    也许你应该试试this sintaxt:

    r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
    

    您的代码有效,但您必须这样做

    print(_htmlPage)
    

    尝试一下

    _requestResult = requests.get("http://www.google.com",headers = headers, timeout = 20)
    

    更新

    问题在于 cookie,在数据包分析后我发现了四个 cookie,所以这就是我的代码

    import requests ,bs4
    
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0'}
    jar = requests.cookies.RequestsCookieJar()
    jar.set('PHPSESSID', '1bj8opfs9nb41l9dgtdlt5cl63', domain='geometriancona.it')
    jar.set('wfvt', '587b6fcd2d87b', domain='geometriancona.it')
    jar.set('_iub_cs-7987130', '%7B%22consent%22%3Atrue%2C%22timestamp%22%3A%222017-01-15T12%3A17%3A09.702Z%22%2C%22version%22%3A%220.13.9%22%2C%22id%22%3A7987130%7D', domain='geometriancona.it')
    jar.set('wordfence_verifiedHuman', 'e8220859a74b2ee9689aada9fd7349bd', domain='geometriancona.it')
    #Load mainPage
    _requestResult = requests.get("http://www.geometriancona.it/categoria_albo/albo/",headers = headers,cookies=jar)
    _requestResult.raise_for_status()
    _htmlPage = bs4.BeautifulSoup(_requestResult.text, "lxml")
    print(_htmlPage)
    

    这是我的输出:http://prnt.sc/dvw2ec

    【讨论】:

    • 当我用浏览器打开网址时,它不会给我任何错误。
    • @Steve 如果使用 www.google.com 它可以工作,问题是您访问的网站可能是因为您必须登录
    • 现在看起来像这样但仍然报错:_requestResult = requests.get("geometriancona.it/categoria_albo/albo", auth=('user', 'pass'), headers = headers)
    • 其他人遇到了这个问题stackoverflow.com/questions/11892729/…
    • 使用 Wireshark 我看到当我使用浏览器访问该网站时 它会发送这些 cookie 我认为 "wordfence_verifiedHuman"对于防止机器人访问很重要,所以我在请求中添加了它,但为了安全我添加了所有cookie,仅此而已.. Wireshark 很有用,考虑一下;)
    猜你喜欢
    • 2018-06-03
    • 2018-09-27
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2018-06-06
    • 2014-12-15
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多