2015-09-03 4 views
-1

Я хотел бы получить ниже элементов из тега «статьи»:питон не смог разобрать HTML, повторно

  1. ссылки
  2. широта и долгота
  3. количество фотографий каждого дома

Но это не сработает.

Вот код Python:

import urllib 
import urllib2 
import re 
import socket 

def getPage(infoUrl): 
    url = infoUrl 
    try: 
     request = urllib2.Request(url) 
     request.add_header("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0") 
     response = urllib2.urlopen(request) 
    except urllib2.URLError, e: 
     print "Bad Url or timeout" 
     print type(e) 
     print e 
     return '' 
    except socket.timeout,e: 
     print "socket timeout" 
     print type(e) 
     print e 
     return '' 
    else: 
     return response.read().decode('utf8') 
     print "Done" 

pattern = re.compile(r'<article.*?latitude="(.*?)".*?longtitude="(.*?)"><a href="(.*?)".*?<figcaption.*?>(.*?)</figcaption>.*?</a>',re.S) 

infoUrl = 'http://www.zillow.com/homes/MA-02139_rb/' 
page = getPage(infoUrl) 

items = re.findall(pattern,page) 
print items 
for item in items: 
    print item 

Кстати, это Python скрипт работает довольно медленно.

Любое предложение по его оптимизации?

+2

Вы ошибочно написали «долготу»; если это так, как в вашем фактическом коде, я бы сказал, что это ваша проблема. Регулярное выражение так свободно (со всеми этими '. *?'), Которое требуется навсегда, чтобы потерпеть неудачу. –

ответ

1

Я настоятельно рекомендую использовать библиотеку, например Beautiful Soup, для разбора HTML. Это явная утилита, и она будет работать лучше, чем регулярное выражение.

например:

soup = BeautifulSoup(your_html_text) 
article = soup.article 

даст вам < статьи> тег.

EDIT: Поскольку вопрос был только что изменен, ознакомьтесь с документацией BeautifulSoup по ссылке выше. Это ответит на ваш основной вопрос.

+4

Кроме того, [вы не должны анализировать html с регулярным выражением] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –

Смежные вопросы