2012-07-23 8 views
7

bilinmemektedir. İhtiyacım olan sayfanın bağlantılarını elde edebiliyorum. Ben bağlantıları açmaya çalıştığınızda Ama "urlopen hatası [Errno -2] Adı veya hizmet bilinmez" olsunPython Web Kazıma - urlopen hatası [Errno -2] Adı veya hizmet Projem için <a href="http://civiccommons.org/apps" rel="noreferrer">Civic Commons Apps</a> bağlantısından veri ayıklamak çalışıyorum

web kazıma piton kodu:

: aşağıdaki hatayı alıyorum

from bs4 import BeautifulSoup 
from urlparse import urlparse, parse_qs 
import re 
import urllib2 
import pdb 

base_url = "http://civiccommons.org" 
url = "http://civiccommons.org/apps" 
page = urllib2.urlopen(url) 
soup = BeautifulSoup(page.read()) 

list_of_links = [] 

for link_tag in soup.findAll('a', href=re.compile('^/civic-function.*')): 
    string_temp_link = base_url+link_tag.get('href') 
    list_of_links.append(string_temp_link) 

list_of_links = list(set(list_of_links)) 

list_of_next_pages = [] 
for categorized_apps_url in list_of_links: 
    categorized_apps_page = urllib2.urlopen(categorized_apps_url) 
    categorized_apps_soup = BeautifulSoup(categorized_apps_page.read()) 

    last_page_tag = categorized_apps_soup.find('a', title="Go to last page") 
    if last_page_tag: 
     last_page_url = base_url+last_page_tag.get('href') 
     index_value = last_page_url.find("page=") + 5 
     base_url_for_next_page = last_page_url[:index_value] 
     for pageno in xrange(0, int(parse_qs(urlparse(last_page_url).query)['page'][0]) + 1): 
     list_of_next_pages.append(base_url_for_next_page+str(pageno)) 

    else: 
     list_of_next_pages.append(categorized_apps_url) 

Ben urlopen gerçekleştirdiğinizde

urllib2.urlopen(categorized_apps_url) 
    File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/usr/lib/python2.7/urllib2.py", line 400, in open 
    response = self._open(req, data) 
    File "/usr/lib/python2.7/urllib2.py", line 418, in _open 
    '_open', req) 
    File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain 
    result = func(*args) 
    File "/usr/lib/python2.7/urllib2.py", line 1207, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "/usr/lib/python2.7/urllib2.py", line 1177, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [Errno -2] Name or service not known> 

belirli bir şey dikkat çekmek gerekir mi? Çünkü aldığım http linkleri ile ilgili bir sorun görmüyorum.

[değiştir]

ikinci vadede ben şu hata var:

File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/usr/lib/python2.7/urllib2.py", line 400, in open 
    response = self._open(req, data) 
    File "/usr/lib/python2.7/urllib2.py", line 418, in _open 
    '_open', req) 
    File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain 
    result = func(*args) 
    File "/usr/lib/python2.7/urllib2.py", line 1207, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "/usr/lib/python2.7/urllib2.py", line 1177, in do_open 
    raise URLError(err) 

aynı kod arkadaşımın Mac iyi çalışır, ancak benim ubuntu 12.04 başarısız olur.

Ayrıca ben kavgacı wiki kod çalıştıran çalıştı ve başarıyla tamamladı. Ancak az sayıda url eksikti (mac ile karşılaştırıldığında). Bu davranış için herhangi bir sebep var mı?

+0

hatasının noktasında 'categorized_apps_url' değeri nedir? – kojiro

+2

Ayrıca, bu tür yorumların genellikle rahatsız edici kabul edildiğini biliyorum, ancak [httplib2] (http://code.google.com/p/httplib2/) veya [request] 'i kullanırsanız hayatı * çok daha kolay bulabilirsiniz (urllib2' yerine http://docs.python-requests.org/en/latest/index.html). Http ile çalışmak için daha eksiksiz özellikler sunarlar. – kojiro

+0

Scriptiniz bilgisayarımdan olduğu gibi çalışıyor. Ben bir python 2.7 ile Mac üzerinde koşuyorum ve her ikisi de BeautifulSoup 3.2 ve 4.0 ile çalıştı ve her iki durumda da 69 ana bağlantı ve 117 sonraki sayfa bağlantıları listesini döndürür. Sisteminizde python'u engelleyen bir şey olduğundan şüpheleniyorum. Bu url'lere doğrudan ping yapmayı denediniz mi? Belki de betiğinizi engelleyen virüsten koruma yazılımı var mı? –

cevap

4

kod benim Mac ve arkadaşların mac çalışır. Ubuntu 12.04 sunucusunun sanal makine örneğinden çalışır. Belli ki çevrenizde bir şey var - os (Ubuntu Desktop?) Veya ağa zarar veren ağ. Örneğin, ev yönlendiricimin varsayılan ayarı, x saniye olarak aynı etki alanına giden çağrıların sayısını azaltır ve kapatmazsam bu tür bir soruna neden olabilir. o şeylerin numarası olabilir. Ben URLError yakalamak ve yeniden deneme için bir kenara sorunlu URL'ler ayarlamak için kodunuzu üstlenmeden öneririm Bu aşamada

. Ayrıca birkaç yeniden denemeden sonra başarısız olursa, günlük/yazdırma hataları. Belki de aramalarınızı hatalar arasında zamanlamak için bazı kodları atmanız gerekebilir. Komut dosyanızın tamamen başarısız olmasından daha iyidir ve yalnızca belirli URL'lerin soruna veya zamanlama sorununa neden olup olmadığı konusunda geri bildirim alırsınız (yani, urlopen çağrılarının x sayısından sonra başarısız olur veya x'den sonra başarısız oluyorsa) urlopen sayısı x mikro/saniye olarak adlandırılır). Bir zamanlama sorunu varsa, döngülerinize takılan basit bir time.sleep(1) numarayı yapabilir.

4

SyncMaster,

Geçenlerde bir süredir birlikte oynamadım eski ubuntu kutusunun üzerine atlayarak sonra aynı konuda koştu. Bu sorun aslında makinenizdeki DNS ayarlarından kaynaklanmaktadır. DNS ayarlarınızı kontrol etmenizi (/etc/resolv.conf ve nameserver 8.8.8.8'i eklemenizi) tavsiye ederim ve tekrar deneyin, başarıya ulaşmalısınız.

İlgili konular