문제

저는 Python을 처음 접했으며 LXML을 사용하여 HTML 태그를 찾아서 반복하는 구문에 대한 도움이 필요합니다. 내가 다루고있는 사용 사례는 다음과 같습니다.

HTML 파일은 상당히 잘 형성되었지만 완벽하지는 않습니다. 화면에 여러 개의 테이블이 있으며, 하나는 검색 결과 세트가 포함되어 있고, 각각은 헤더 및 바닥 글을위한 각각 하나입니다. 각 결과 행에는 검색 결과 세부 사항에 대한 링크가 포함되어 있습니다.

  1. 검색 결과 행이있는 가운데 테이블을 찾아야합니다 (이 점을 알아낼 수있었습니다).

        self.mySearchTables = self.mySearchTree.findall(".//table")
        self.myResultRows = self.mySearchTables[1].findall(".//tr")
    
  2. 이 테이블에 포함 된 링크를 찾아야합니다 (이것은 내가 붙어있는 곳입니다) :

        for searchRow in self.myResultRows:
            searchLink = patentRow.findall(".//a")
    

    실제로 링크 요소를 찾는 것은 아닙니다.

  3. 링크의 일반 텍스트가 필요합니다. 나는 그것이 같은 것일 것이라고 생각합니다 searchLink.text 실제로 처음에 링크 요소를 얻었다면.

마지막으로, LXML의 실제 API 참조에서는 찾기 및 Findall 호출에 대한 정보를 찾을 수 없었습니다. 나는 Google에서 찾은 일부 코드에서 얻었습니다. LXML을 사용하여 HTML 태그를 효과적으로 찾고 반복하는 방법에 대해 뭔가 빠졌습니까?

도움이 되었습니까?

해결책

좋아, 먼저, HTML을 구문 분석하는 것과 관련하여 : ZweiterLinde와 S.Lott의 권장 사항을 따르면 최소한 버전을 사용하십시오. LXML에 포함 된 BeautifulSoup. 이렇게하면 멋진 XPath 또는 CSS 선택기 인터페이스의 이점을 얻을 수 있습니다.

그러나 나는 개인적으로 Ian Bicking을 선호합니다 HTML 파서는 LXML에 포함되어 있습니다.

둘째, .find() 그리고 .findall() LXML에서 나왔고 ElementTree와 호환 되며이 두 가지 방법이 ElementTree의 XPath 지원.

이 두 기능은 사용하기 쉽지만 XPath가 매우 제한적입니다. 전체 LXML을 사용하는 것이 좋습니다 xpath() 방법 또는 이미 CSS에 익숙하다면 cssselect() 방법.

다음은 HTML 문자열이 다음과 같이 구문 분석 된 몇 가지 예입니다.

from lxml.html import fromstring
mySearchTree = fromstring(your_input_string)

CSS 선택기 클래스를 사용하면 프로그램이 대략적으로 다음과 같이 보입니다.

# Find all 'a' elements inside 'tr' table rows with css selector
for a in mySearchTree.cssselect('tr a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

XPath 방법을 사용하는 동등한 것은 다음과 같습니다.

# Find all 'a' elements inside 'tr' table rows with xpath
for a in mySearchTree.xpath('.//tr/*/a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

다른 팁

사용하지 않는 이유가 있습니까? 아름다운 수프 이 프로젝트를 위해? 불완전하게 형성된 문서를 훨씬 쉽게 다룰 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top