如何从python 3中的url读取html

时间:2014-06-11 01:56:17

标签: python html url

我看了之前的类似问题而且更加困惑。

在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。

6 个答案:

答案 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()