2008-11-19 6 views
0

Je ne fais que jouer et j'essaie d'obtenir des informations sur des sites Web. Malheureusement, avec le code suivant:(Python) socket.gaierror sur toutes les adresses ... sauf http://www.reddit.com?

import sys 
import socket 
import re 
from urlparse import urlsplit 

url = urlsplit(sys.argv[1]) 


sock = socket.socket() 
sock.connect((url[0] + '://' + url[1],80)) 
path = url[2] 
if not path: 
    path = '/' 

print path 
sock.send('GET ' + path + ' HTTP/1.1\r\n' 
    + 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.3.154.9 Safari/525.19\r\n' 
    + 'Accept: */*\r\n' 
    + 'Accept-Language: en-US,en\r\n' 
    + 'Accept-Charset: ISO-8859-1,*,utf-8\r\n' 
    + 'Host: 68.33.143.182\r\n' 
    + 'Connection: Keep-alive\r\n' 
    + '\r\n') 

Je reçois l'erreur suivante:

Traceback (most recent call last):
File "D:\Development\Python\PyCrawler\PyCrawler.py", line 10, in sock.connect((url[0] + '://' + url[1],80)) File "", line 1, in connect socket.gaierror: (11001, 'getaddrinfo failed')

La seule fois où je ne reçois pas d'erreur est de savoir si l'URL est passé http://www.reddit.com. Toutes les autres URL que j'ai essayées arrivent avec socket.gaierror. Quelqu'un peut-il expliquer cela? Et peut-être donner une solution?

Répondre

3

S'il vous plaît s'il vous plaît s'il vous plaît s'il vous plaît s'il vous plaît s'il vous plaît s'il vous plaît s'il vous plaît ne faites pas cela.

urllib et urllib2 sont vos amis.

Lire the "missing" urllib2 manual si vous rencontrez des problèmes avec elle.

1

vous avez oublié de résoudre le nom d'hôte:

addr = socket.gethostbyname(url[1]) 
... 
sock.connect((addr,80)) 
3
sock.connect((url[0] + '://' + url[1],80)) 

Ne fais pas ça, faire au lieu ceci:

sock.connect((url[1], 80)) 

connect attend un nom d'hôte, pas une URL.

En fait, vous devriez probablement utiliser quelque chose de plus haut niveau que les sockets pour faire du HTTP. Peut-être httplib.

+1

J'ai aussi essayé. Il me donne des erreurs Access Denied partout. –

2

Avez-vous déjà modifié votre Hosts file? S'il a une entrée pour Reddit mais pas grand chose d'autre, cela peut expliquer le résultat unique de ce site.

Questions connexes