我看了之前的类似问题而且更加困惑。
在python 3.4中,我希望在给定url的情况下将html页面作为字符串读取。
在perl中,我用LWP :: Simple,使用get()。
matplotlib 1.3.1示例说:import urllib; u1=urllib.urlretrieve(url)
。
python3找不到urlretrieve
。
我尝试了u1 = urllib.request.urlopen(url)
,它似乎得到了一个HTTPResponse
对象,但是我无法打印它或获得它的长度或索引它。
u1.body
不存在。我在python3中找不到HTTPResponse
的描述。
HTTPResponse
对象中是否有一个属性可以为我提供html页面的原始字节?
(来自其他问题的不相关的东西包括urllib2
,我的python,csv解析器等中不存在。)
修改
我在先前的问题中找到了一些部分(大部分)完成工作的东西:
u2 = urllib.request.urlopen('http://finance.yahoo.com/q?s=aapl&ql=1')
for lines in u2.readlines():
print (lines)
我说'部分'因为我不想读单独的行,而只是一个大字符串。
我可以将这些行连接起来,但是每行打印都会在其前面添加一个字符“b”。
这是从哪里来的?
同样,我想我可以在连接之前删除第一个字符,但这确实是一个kloodge。
答案 0 :(得分:48)
请注意,Python3不会将html代码作为字符串读取,而是以bytearray
的形式读取,因此您需要将其转换为decode
的。
import urllib.request
fp = urllib.request.urlopen("http://www.python.org")
mybytes = fp.read()
mystr = mybytes.decode("utf8")
fp.close()
print(mystr)
答案 1 :(得分:23)
尝试“请求”模块,它会更简单。
#pip install requests for installation
import requests
url = 'https://www.google.com/'
r = requests.get(url)
r.text
此处提供更多信息> http://docs.python-requests.org/en/master/
答案 2 :(得分:9)
urllib.request.urlopen(url).read()
应该将原始HTML页面作为字符串返回。
答案 3 :(得分:8)
import requests
url = requests.get("http://yahoo.com")
htmltext = url.text
print(htmltext)
这与urllib.urlopen
类似。
答案 4 :(得分:4)
使用urllib读取html页面非常简单。由于你想把它作为单个字符串阅读,我会告诉你。
导入urllib.request:
#!/usr/bin/python3.5
import urllib.request
准备我们的请求
request = urllib.request.Request('http://www.w3schools.com')
始终使用"尝试/除了"在请求网页时,事情很容易出错。 urlopen()请求页面。
try:
response = urllib.request.urlopen(request)
except:
print("something wrong")
类型是一个很棒的功能,可以告诉我们什么'键入'变量是。这里,response是一个http.response对象。
print(type(response))
我们的响应对象的读取函数会将html作为字节存储到变量中。同样,type()将验证这一点。
htmlBytes = response.read()
print(type(htmlBytes))
现在我们使用bytes函数的decode函数来获取单个字符串。
htmlStr = htmlBytes.decode("utf8")
print(type(htmlStr))
如果您确实希望将此字符串拆分为单独的行,则可以使用split()函数执行此操作。在这种形式下,我们可以轻松地迭代打印整个页面或进行任何其他处理。
htmlSplit = htmlStr.split('\n')
print(type(htmlSplit))
for line in htmlSplit:
print(line)
希望这提供了更详细的答案。 Python文档和教程非常棒,我会将其作为参考,因为它可以回答您可能遇到的大多数问题。
答案 5 :(得分:0)
import urllib
some_url = 'https://docs.python.org/2/library/urllib.html'
filehandle = urllib.urlopen(some_url)
print filehandle.read()