2017-05-30 3 views
0

je tente d'ouvrir une page de projet pour l'édition avec gutenberg BeautifulSoupurlopen erreur HTTP

import urllib2 
from bs4 import BeautifulSoup 

url = "http://www.gutenberg.org/files/54801/54801-h/54801-h.htm" 
page = urllib2.urlopen(url) 
soup_packtpage=BeautifulSoup(page) 

print(soup_packtpage) 

Je travaille dans Cloud9. J'ai l'erreur suivante:

Traceback (most recent call last): 
File "soup.py", line 5, in <module> 
page = urllib2.urlopen(url) 
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen 
return _opener.open(url, data, timeout) 
File "/usr/lib/python2.7/urllib2.py", line 410, in open 
response = meth(req, response) 
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response 
'http', request, response, code, msg, hdrs) 
File "/usr/lib/python2.7/urllib2.py", line 448, in error 
return self._call_chain(*args) 
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain 
result = func(*args) 
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default 
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 403: Forbidden 

Qu'est-ce qui ne va pas?

+1

C'est une erreur HTTP, pas une erreur python. Il dit que vous n'êtes pas autorisé à faire cette demande. En-têtes éventuellement manquants, comme les cookies ou les informations d'identification de l'API – adelineu

+0

Je ne parviens pas à reproduire ce problème. Je reçois une impression énorme. – roganjosh

+2

vous obtenez 403 parce qu'il doit mettre en place des cookies. sur mon premier essai, il m'a fallu à la page ~ welcome_stranger, puis sur la deuxième tentative d'essai a été couronnée de succès. Est-ce quelque chose que vous voyez? – oshaiken

Répondre

1

Vous devriez essayer d'utiliser le package requests.

Cela fonctionne bien pour moi en python 3,6

import requests 
from bs4 import BeautifulSoup as bs4 

url = "http://www.gutenberg.org/files/54801/54801-h/54801-h.htm" 
r = requests.get(url) 
#page = urllib3.urlopen(url) 
soup_packtpage = bs4(r.text, 'html.parser') 

print(soup_packtpage) 

paragrapghs = soup_packtpage.findAll("p") 
print(paragrapghs) 

f = open("guttenberg_book.html", 'a', encoding="utf-8") 
f.write(str(paragrapghs)) 
f.close() 

i ajouté un paragraphe d'impression à l'aide BS4 pour vous aider à démarrer .. cette commande affiche le texte du livre seulement .. :)

2
import cookielib 
import urllib2 

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12;rv:50.0) Gecko/20100101 Firefox/50.0'} 
cookie = cookielib.CookieJar() 
handler = urllib2.HTTPCookieProcessor(cookie) 
opener = urllib2.build_opener(handler) 

request = urllib2.Request(url = "http://www.gutenberg.org/files/54801/54801-h/54801-h.htm", headers=headers) 
page = opener.open(request).read() 

Essayez Demander et ajouter des en-têtes Cela fonctionne pour moi en Python 2.7.13