Biblioteka urrlib i błąd "AttributeError: 'module' object has no attribute 'urlopen'"

0

Witam,

na wstępie zaznaczam, że korzystam z Pythona v. 2.7. Wczoraj wyświetlałam sobie źródła stron przy pomocy kodu:

import urllib                                        
sock = urllib.urlopen("http://www.gratka.pl/")      
htmlSource = sock.read()                             
sock.close()                                         
print htmlSource

Rozbudowałam kod, aby wyłuskiwał mi np. tytuły do notatnika i wszystko grało - ładnie zapisywało kod HTML (lub wybrane dane) do notatnika. Dziś pobrałam bibliotekę Beutiful Soup 4, zainstalowałam też pip.py i od tego momentu nie mogę odpalić tego kodu, bo wyskakuje mi błąd:

"AttributeError: 'module' object has no attribute 'urlopen'"

Próbowałam szukać odpowiedzi u wujka Googla i znalazłam, że muszę zastapić bibliotekę na urllib.request

import urllib.request
with urllib.request.urlopen("http://www.gratka.pl") as url:
    s = url.read()
print(s)

Tej biblioteki też mi nie czyta, bo jest chyba do Pythona 3.0

Proszę o pomoc :(

2

A potrafisz pisać po polsku? API się zmieniło pomiędzy Pythonem 2 i 3.
Python 3 ma

urllib.request.urlopen

A Python 2

urllib.urlopen

O czym jasno mówi dokumentacja:

Note: The urllib module has been split into parts and renamed in Python 3 to urllib.request, urllib.parse, and urllib.error. The 2to3 tool will automatically adapt imports when converting your sources to Python 3. Also note that the urllib.request.urlopen() function in Python 3 is equivalent to urllib2.urlopen() and that urllib.urlopen() has been removed.

źródło: https://docs.python.org/2.7/library/urllib.html

0

No wiem, ale co w związku z tym? Trzymam się zasad wg dokumentacji dla Pythona 2.x:

import urllib 
sock = urllib.urlopen("http://gratka.pl/")

i wciąż wywala mi błąd: " Error: 'module' object has no attribute 'urlopen' ", nie wiem nadal dlaczego, tym bardziej że wczoraj kod działał bez najmniejszych zarzutów, dopóki nie zaczęłam instalować biblioteki Beautiful Soup 4...

1

A pewna jesteś że odpalasz to interpreterem pythona 2? Co ci wypisuje: dir(urllib)?

0

Komenda, którą podałeś dir(urllib) pokazuje mi coś takiego (w Interactive Window):

['SGMLParser', 'URLLister', '__builtins__', '__doc__', '__file__', '__name__', '__package__']

Zaczęłam czytać o tej funkcji dir i domyślam się, że błąd wyskakuje dlatego, że nie ma metody "openurl" na liście metod modułu urllib. Czy źle rozumuję?

1

No to teraz powiedz mi co ci wypisuje:

import sys
sys.version

I dlaczego jest to python 3 (albo jakiś <2.6 ? o_O)

0

A takie coś mi wyskakuje :

'2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)]'

Nie jest to ani wersja 3.0 ani <2.6, zresztą widać powyżej :)

1

To ja nie wiem co to za dziwna implementacja, bo zgodnie z dokumentacją powinnaś mieć takie rzeczy:
https://docs.python.org/release/2.7/library/urllib.html#module-urllib
a u ciebie jest jakiś misz-masz, szczególnie że SGMLParser od zawsze był w sgmllib i nie wiem skąd go niby masz w urllib.
Zainstaluj nowego pythona, bo twój jest dziwny i ma 3 lata.

0

Ok, zainstaluję nowego, mam nadzieję, że nie natknę się na podobne problemy.

W każdym razie wielkie dzięki za pomoc ! ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1