我可以将read()函数绑定到python中的'instance'类型吗?

时间:2016-06-24 08:14:43

标签: python web-scraping beautifulsoup urllib2

我正在学习BeautifulSoup,我遇到了这个

from bs4 import BeautifulSoup
import urllib2

url = "https://en.wikipedia.org/wiki/Katy_Perry"
open_url = urllib2.urlopen(url)
read = open_url.read()
print(read)

这将打印页面的html代码。但是我们怎么能在这里使用read()呢?它是一个FileIO函数,应该与文件对象一起使用。但是这里的变量“open_url”不是文件对象。

print(type(open_url))

输出:

<type 'instance'>

显然“open_url”不是文件对象,那么是什么才能将read()绑定到“open_url”?

1 个答案:

答案 0 :(得分:0)

如果您同时打印open_url,则会看到fp = socket._fileobject ..

<addinfourl at 139707791457312 whose fp = <socket._fileobject object at 0x7f104303bd50>>

因此,您看到文件对象实际上是socket._fileobject,您可以使用open_url.fp访问该文件:

<socket._fileobject object at 0x7f104303bd50>

如果删除第一个读取调用,您将看到可以访问套接字对象并直接调用 .read ,这就是调用open_url.read()等时发生的情况。 :

open_url.fp.read()