【问题标题】:hangs on open url with urllib (python3)使用 urllib (python3) 挂在打开的 url
【发布时间】:2017-08-19 06:28:14
【问题描述】:

我尝试用python3打开url:

import urllib.request
fp = urllib.request.urlopen("http://lebed.com/")

mybytes = fp.read()    
mystr = mybytes.decode("utf8")
fp.close()

print(mystr)

但它挂在第二行。 这个问题的原因是什么以及如何解决?

【问题讨论】:

    标签: python-3.x urllib


    【解决方案1】:

    我想原因是该网址不支持机器人访问站点访问。您需要通过将浏览器标头与您的请求一起发送来伪造浏览器访问

    import urllib.request
    url = "http://lebed.com/"
    req = urllib.request.Request(
        url, 
        data=None, 
        headers={
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
        }
    )
    f = urllib.request.urlopen(req)
    

    在我的系统上试过这个,它可以工作。

    【讨论】:

      【解决方案2】:

      同意 Arpit Solanki 的观点。显示失败请求与成功的输出。

      Failed
          GET / HTTP/1.1
          Accept-Encoding: identity
          Host: www.lebed.com
          Connection: close
          User-Agent: Python-urllib/3.5
      
      Success
          GET / HTTP/1.1
          Accept-Encoding: identity
          Host: www.lebed.com
          Connection: close
          User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36
      

      【讨论】:

      • 你是如何得到这个输出的?
      • 这是抓包的输出。我在一个 linux 机器上,所以我运行的命令是:tcpdump -nn -vv -i eth0。同样可以从 wireshark 或其他打包程序捕获实用程序中获得。
      猜你喜欢
      • 2013-05-13
      • 1970-01-01
      • 2020-10-01
      • 2017-02-06
      • 2020-08-31
      • 1970-01-01
      • 2023-03-03
      • 2015-09-01
      • 1970-01-01
      相关资源
      最近更新 更多