HTML을 구문 분석하기위한 Python LXML 구문 도움말이 필요합니다
-
03-07-2019 - |
문제
저는 Python을 처음 접했으며 LXML을 사용하여 HTML 태그를 찾아서 반복하는 구문에 대한 도움이 필요합니다. 내가 다루고있는 사용 사례는 다음과 같습니다.
HTML 파일은 상당히 잘 형성되었지만 완벽하지는 않습니다. 화면에 여러 개의 테이블이 있으며, 하나는 검색 결과 세트가 포함되어 있고, 각각은 헤더 및 바닥 글을위한 각각 하나입니다. 각 결과 행에는 검색 결과 세부 사항에 대한 링크가 포함되어 있습니다.
검색 결과 행이있는 가운데 테이블을 찾아야합니다 (이 점을 알아낼 수있었습니다).
self.mySearchTables = self.mySearchTree.findall(".//table") self.myResultRows = self.mySearchTables[1].findall(".//tr")
이 테이블에 포함 된 링크를 찾아야합니다 (이것은 내가 붙어있는 곳입니다) :
for searchRow in self.myResultRows: searchLink = patentRow.findall(".//a")
실제로 링크 요소를 찾는 것은 아닙니다.
링크의 일반 텍스트가 필요합니다. 나는 그것이 같은 것일 것이라고 생각합니다
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'))
다른 팁
사용하지 않는 이유가 있습니까? 아름다운 수프 이 프로젝트를 위해? 불완전하게 형성된 문서를 훨씬 쉽게 다룰 것입니다.