这是我在python 3中使用urllib的问题。
我编写了一段在Python 2.7中运行良好且使用urllib2的代码。它会转到Internet上的页面(需要授权)并从该页面抓取信息。
对我来说真正的问题是我无法使我的代码在python 3.4中工作,因为没有urllib2,而urllib的工作方式不同;即使经过几个小时的谷歌搜索和阅读,我什么也没得到。所以,如果有人能帮助我解决这个问题,我真的很感激帮助。
这是我的代码:
request = urllib2.Request('http://mysite/admin/index.cgi?index=127')
base64string = base64.encodestring('%s:%s' % ('login', 'password')).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
resulttext = result.read()
答案 0 :(得分:8)
谢天谢地,我们终于想出了它的运作方式。 这是我的代码:
request = urllib.request.Request('http://mysite/admin/index.cgi?index=127')
base64string = base64.b64encode(bytes('%s:%s' % ('login', 'password'),'ascii'))
request.add_header("Authorization", "Basic %s" % base64string.decode('utf-8'))
result = urllib.request.urlopen(request)
resulttext = result.read()
毕竟,urllib还有一个区别:我的resulttext
变量的类型为<bytes>
而不是<str>
,所以要对其中的文字做一些事情我必须解码它:
text = resulttext.decode(encoding='utf-8',errors='ignore')
答案 1 :(得分:7)
urllib.request怎么样?它似乎拥有你需要的一切。
import base64
import urllib.request
request = urllib.request.Request('http://mysite/admin/index.cgi?index=127')
base64string = bytes('%s:%s' % ('login', 'password'), 'ascii')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib.request.urlopen(request)
resulttext = result.read()
答案 2 :(得分:0)
在python 3中使用urllib,这是我的代码:
from urllib.request import urlopen
url = 'https://someurl/'
page = urlopen(url)
html = page.read()