2016-06-24 1 views
0

ich lerne BeautifulSoup und ich hatte diesesKann ich die Funktion read() an den Typ 'Instanz' in Python binden?

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) 

Diese den HTML-Code der Seite gedruckt wird. Aber wie können wir hier lesen()? Es ist eine FileIO-Funktion und sollte zusammen mit dem Dateiobjekt verwendet werden. aber die Variable "open_url" ist hier kein Dateiobjekt.

print(type(open_url)) 

Ausgang:

<type 'instance'> 

Offensichtlich "open_url" ist kein Dateiobjekt, also was es möglich gemacht, gelesen zu binden() auf "open_url"?

+0

Mögliches Duplikat [? Was ist der Unterschied zwischen altem Stil und neuen Stil Klassen in Python ist] (http://stackoverflow.com/questions/54867/what-is-the-difference -zwischen-alt-style-und-neu-style-classes-in-python –

+0

'open' ist eine Instanz eines Objekts, was bedeutet, dass es fast alles enthalten kann (Attribute und Methoden). Hinweis: Benennen Sie Ihre Variable für etwas anderes um, da 'open()' eine eingebaute Funktion ist. – Cyrbil

Antwort

0

Wenn Sie drucken beide open_url Sie werden sehen, dass fp = socket._fileobject ..

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

So können Sie die Datei-Objekt zu sehen ist eigentlich ein socket._fileobject, die Sie mit open_url.fp zugreifen:

<socket._fileobject object at 0x7f104303bd50> 

Wenn Sie die erste entfernen Leseanruf sehen Sie, dass Sie auf das Socket-Objekt zugreifen können und .Read darauf direkt aufrufen, das ist, was passiert, wenn Sieaufrufenetc ..:

open_url.fp.read() 
Verwandte Themen