2014-10-31 4 views
-1

NO библиотеки ...Как извлечь все имя ссылки из HTML страницы

Я стараюсь, чтобы получить все название ссылки с веб-страницы, код выглядит следующим образом

url="http://einstein.biz/" 
m = urllib.request.urlopen(url) 
msg = m.read() 
titleregex=re.compile('<a\s*href=[\'|"].*?[\'"].*?>(.+?)</a>') 
titles = titleregex.findall(str(msg)) 
print(titles) 

Названия являются

['Photo Gallery', 'Bio', 'Quotes', 'Links', 'Contact', 'official store', '\\xe6\\x97\\xa5\\xe6\\x9c\\xac\\xe8\\xaa\\x9e', '<img\\n\\t\\tsrc="http://corbisrightsceleb.122.2O7.net/b/ss/corbisrightsceleb/1/H.14--NS/0"\\n\\t\\theight="1" width="1" border="0" alt="" />'] 

это не идеально, я хотел бы иметь только следующее:

['Photo Gallery', 'Bio', 'Quotes', 'Links', 'Contact', 'official store'] 

Как пересмотреть код?

+0

Заменить '(. +?)' В шаблоне ре с чем-то вроде '([\ ш \ s] +)' – kums

+2

Это действительно трудно использовать регулярные выражения для разбора HTML-код. регулярные выражения (и особенно регулярные выражения python) не любят вложенную структуру. Но [BeautifulSoup] (http://www.crummy.com/software/BeautifulSoup/) - хороший инструмент для анализа HTML ... –

+2

Обязательная ссылка на [почему вы не должны анализировать HTML с регулярным выражением] (http: // stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – miles82

ответ

0

Вы должны использовать BeautifulSoup при работе с HTML или XML-файлов.

>>> url="http://einstein.biz/" 
>>> import urllib.request 
>>> m = urllib.request.urlopen(url) 
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(m) 
>>> s = soup.find_all('a') 
>>> [i.string for i in s] 
['Photo Gallery', 'Bio', 'Quotes', 'Links', 'Contact', 'official store', '日本語', None] 

Update:

>>> import urllib.request 
>>> url="http://einstein.biz/" 
>>> m = urllib.request.urlopen(url) 
>>> msg = m.read() 
>>> regex = re.compile(r'(?s)<a\s*href=[\'"].*?[\'"][^<>]*>([A-Za-z][^<>]*)</a>') 
>>> titles = regex.findall(str(msg)) 
>>> print(titles) 
['Photo Gallery', 'Bio', 'Quotes', 'Links', 'Contact', 'official store'] 
+0

извините, я забыл упомянуть ни одну библиотеку – 3414314341

+0

@ 3414314341 тег содержит некоторые символы в Юникоде. Вы хотели их или нет? –

+0

@ 3414314341 см. Мое обновление .. –

0

Я определенно рассмотрю BeautifulSoup как упоминается @serge. Чтобы сделать его более убедительным, я включил код, который будет делать именно то, что вам нужно.

from bs4 import BeautifulSoup 
soup = BeautifulSoup(msg)   #Feed BeautifulSoup your html. 
for link in soup.find_all('a'): #Look at all the 'a' tags. 
    print(link.string)    #Print out the descriptions. 

возвращает

Photo Gallery 
Bio 
Quotes 
Links 
Contact 
official store 
0

Я предпочитаю lxml.html чем BeautifulSoup, что поддержка и CSSSelector XPath.

import requests 
import lxml.html 

res = requests.get("http://einstein.biz/") 
doc = lxml.html.fromstring(res.content) 
links = doc.cssselect("a") 
for l in links: 
    print l.text