2012-12-26 1 views
0

정말 바보 같아서 미안하지만 파이썬에서 도움이 필요합니다.정규식을 사용하여 Python 2.7에서 html을 구문 분석 - 실제로 이해하지 못함

['<a href="needs to be cut out">Foo to BAR</a>', '<a href="this also needs to be cut out">BAR to Foo</a>'] 

그래서 나는이 튜플을 가지고 있고, 나는 그 href 속성 내부의 어떤 내부 <a> 태그 무엇을 잘라 필요 - 기본적으로 내가 좋아 보이는 튜플 싶어 : 내부

[["needs to be cut out", "Foo to BAR"], ["this also needs to be cut out", "BAR to Foo"]] 

을 예를 들어 특수 기호 많이 있습니다 href 속성,

<a href="?a=p.stops&amp;direction_id=23600&amp;interval=1&amp;t=wml&amp;l=en"> 

내가 정말하려고 필요가없는 경우, HTML 파서를 사용하여 너무 많은 문제가 있다고 생각대로 객체 트리를 구문 분석하지만 웹 페이지에서 몇 개의 URL과 단어 만 필요합니다. 하지만 정규 표현식을 만드는 법을 정말로 이해할 수는 없습니다. 내가 만든 Regexes 완전히 틀린 것 같습니다. 그래서 누군가가 저를 도울 수 있는지 묻고 있습니다.

답변

1

어쨌든 HTML 구문 분석기 만 사용하십시오. 파이썬이 포함 된 몇 가지와 함께 제공하고 xml.etree.ElementTree API은 임의의 속성도 간단한 <a> 태그를 정규 표현식보다 작업을 얻을 쉽게 : 당신은 당신이 아무것도에서 텍스트를 얻을 수 있습니다 ' '.join(link.itertext()) 중첩 사용하는 경우

from xml.etree import ElementTree as ET 

texts = [] 
for linktext in linkslist: 
    link = ET.fromstring(linktext) 
    texts.append([link.attrib['href'], link.text]) 

for linktext in linkslist: 
    link = ET.fromstring(linktext) 
    texts.append([link.attrib['href'], ' '.join(link.itertext())]) 
다음 <a> 태그 아래에, 당신은 링크의 일부는 더 링크 텍스트를 마크 업 <span>, <b>, <i> 또는 기타 인라인 태그를 중첩 판명되면

이 제공 :

>>> from xml.etree import ElementTree as ET 
>>> linkslist = ['<a href="needs to be cut out">Foo to BAR</a>', '<a href="this also needs to be cut out">BAR to Foo</a>']  
>>> texts = [] 
>>> for linktext in linkslist: 
...  link = ET.fromstring(linktext) 
...  texts.append([link.attrib['href'], ' '.join(link.itertext())]) 
... 
>>> texts 
[['needs to be cut out', 'Foo to BAR'], ['this also needs to be cut out', 'BAR to Foo']] 
1

당신은 HTML 엔티티를 구문 분석 BeautifulSoup로 사용할 수 있습니다.

문제에 따라 이미 목록은 다음과 같습니다

l = ['<a href="needs to be cut out">Foo to BAR</a>', '<a href="this also needs to be cut out">BAR to Foo</a>'] 

을 이제 당신이 필요로하는 모든 코드 따르고있다.

from BeautifulSoup import BeautifulSoup 

parsed_list = [] 

for each in l: 
    soup = BeautifulSoup(each) 
    parsed_list.append([soup.find('a')['href'], soup.find('a').contents[0]]) 

는 :)

0

내가 그것을 위해 쉬운 HTML을 파서 EHP를 사용하는 것이 도움이되기를 바랍니다.

체크 아웃 https://github.com/iogf/ehp

lst = ['<a href="needs to be cut out">Foo to BAR</a>', '<a href="this also needs to be cut out">BAR to Foo</a>', '<a href="?a=p.stops&amp;direction_id=23600&amp;interval=1&amp;t=wml&amp;l=en">'] 

data = [(tag.text(), attr.get('href'))for indi in lst 
      for tag, name, attr in Html().feed(indi).walk() if attr.get('href')] 


data 

출력 :

[('Foo to BAR', 'needs to be cut out'), ('BAR to Foo', 'this also needs to be cut out'), ('', u'?a=p.stops&direction_id=23600&interval=1&t=wml&l=en')] 
관련 문제