Python urllib.urlopen IOError
Donc, j'ai les lignes suivantes de code dans une fonction
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
et qu'ils fonctionnent très bien lorsque j'appelle la fonction main. Cependant, lorsque j'appelle la fonction dans une boucle (en utilisant la même url, comme plus tôt), je reçois le message d'erreur suivant:
> Traceback (most recent call last):
File "./headlines.py", line 256, in <module>
main(argv[1:])
File "./headlines.py", line 37, in main
write_articles(headline, output_folder + "articles_" + term +"/")
File "./headlines.py", line 232, in write_articles
print get_blogs(headline, 5)
File "/Users/michaelnussbaum08/Documents/College/Sophmore_Year/Quarter_2/Innovation/Headlines/_code/get_content.py", line 41, in get_blogs
sock = urllib.urlopen(url)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 87, in urlopen
return opener.open(url)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 203, in open
return getattr(self, name)(url)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 314, in open_http
if not host: raise IOError, ('http error', 'no host given')
IOError: [Errno http error] no host given
Des idées?
Modifier le code:
def get_blogs(term, num_results):
search_term = term.replace(" ", "+")
print "search_term: " + search_term
url = 'http://blogsearch.google.com/blogsearch_feeds?hl=en&q='+search_term+'&ie=utf-8&num=10&output=rss'
print "url: " +url
#error occurs on line below
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
def write_articles(headline, output_folder, num_articles=5):
#calls get_blogs
if not os.path.exists(output_folder):
os.makedirs(output_folder)
output_file = output_folder+headline.strip("\n")+".txt"
f = open(output_file, 'a')
articles = get_articles(headline, num_articles)
blogs = get_blogs(headline, num_articles)
#NEW FUNCTION
#the loop that calls write_articles
for term in trend_list:
if do_find_max == True:
fill_search_term(term, output_folder)
headlines = headline_process(term, output_folder, max_headlines, do_find_max)
for headline in headlines:
try:
write_articles(headline, output_folder + "articles_" + term +"/")
except UnicodeEncodeError:
pass
Merci de poster plus de code.
OriginalL'auteur Michael | 2010-04-20
Vous devez vous connecter pour publier un commentaire.
utilisation urllib2 à la place si vous ne voulez pas gérer la lecture par bloc de base vous-même.
Ce n'est probablement ce que vous attendez.
OriginalL'auteur
J'ai eu ce problème quand une variable I est la concaténation avec l'url, dans votre cas
search_term
avait un caractère de saut de ligne à la fin. Donc, assurez-vous de ne
Vous pouvez également faire
à assurez-vous que votre chaîne est sûr pour une url
OriginalL'auteur
Dans votre fonction de boucle, juste avant l'appel à
urlopen
, peut-être mettre une instruction d'impression:De cette façon, lorsque vous exécutez le script et obtenir la IOError, vous verrez la
url
qui est à l'origine du problème. Le message d'erreur "no hôte donné" peut être reproduit siurl
est égal à quelque chose comme'http://'
...Pouvez-vous mettre à jour sur la question afin que nous puissions voir la boucle?
Le fait-il toujours bloquer sur la même requête ou la différence? Vous êtes derrière un proxy web?
OriginalL'auteur unutbu