이 글은 주로 Python 크롤러에서 xpath의 기본 사용법을 소개합니다. 이제 공유하고 참고용으로 제공합니다. 함께 살펴볼까요
1. 소개
XPath는 XML 문서에서 정보를 찾는 언어입니다. XPath는 XML 문서의 요소와 속성을 탐색하는 데 사용할 수 있습니다. XPath는 W3C XSLT 표준의 주요 요소이며 XQuery와 XPointer는 모두 XPath 표현식을 기반으로 구축되었습니다.
2. 설치
pip3 install lxml
3. 가져오기
from lxml import etree
를 사용합니다. 기본 사용법
from lxml import etree wb_data = """ <p> <ul> <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >first item</a></li> <li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li> <li class="item-1"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li> <li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a> </ul> </p> """ html = etree.HTML(wb_data) print(html) result = etree.tostring(html) print(result.decode("utf-8"))
아래에서 결과적으로 우리의 프린터 HTML은 실제로 Python 개체이고 etree.tostring(html)은 레이블의 누락된 팔과 다리를 완성하는 불완전한 HTML의 기본 작성 방법입니다.
<Element html at 0x39e58f0> <html><body><p> <ul> <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >first item</a></li> <li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li> <li class="item-1"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li> <li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a> </li></ul> </p> </body></html>
3. a 태그의 모든 콘텐츠를 가져오려면 a 뒤에 슬래시를 추가할 필요가 없습니다. 그렇지 않으면 오류가 발생합니다. 보고됩니다.
작성 방법 1
html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a') print(html) for i in html_data: print(i.text) <Element html at 0x12fe4b8> first item second item third item fourth item fifth item
작성 방법 2 (찾아야 하는 태그 바로 뒤에 /text()만 추가하면 됩니다)
html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a/text()') print(html) for i in html_data: print(i) <Element html at 0x138e4b8> first item second item third item fourth item fifth item
4.html 파일을 열어서 읽어보세요
#使用parse打开html的文件 html = etree.parse('test.html') html_data = html.xpath('//*')<br>#打印是一个列表,需要遍历 print(html_data) for i in html_data: print(i.text)
html = etree.parse('test.html') html_data = etree.tostring(html,pretty_print=True) res = html_data.decode('utf-8') print(res) 打印: <p> <ul> <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >first item</a></li> <li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li> <li class="item-1"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li> <li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a></li> </ul> </p>
5. 지정된 경로 아래에 태그의 속성을 인쇄합니다(태그의 내용을 탐색하여 찾을 수 있음)
html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a/@href') for i in html_data: print(i)
인쇄:
link1.htmllink2.htmllink3.html
link4.html
link5.html
6 우리는 ElementTree 개체를 하나씩 가져오는 데 사용한다는 것을 알고 있습니다. 콘텐츠를 찾아야 하며, 데이터를 얻기 위해 목록을 탐색해야 할 수도 있습니다. 절대 경로 아래의 a 태그 속성이 link2.html과 동일한 것을 발견했습니다.
html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a[@href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]/text()') print(html_data) for i in html_data: print(i)
Print:
['두 번째 항목']두 번째 항목7 위에서는 모든 절대 경로(각 경로는 루트에서 시작)를 찾고, 아래에서는 상대 경로를 찾습니다. 예를 들어, 모든 li 태그 아래에서 태그 내용을 찾습니다.
html = etree.HTML(wb_data) html_data = html.xpath('//li/a/text()') print(html_data) for i in html_data: print(i)
인쇄:
['첫 번째 항목', '두 번째 항목', '세 번째 항목', '네 번째 항목', '다섯 번째 항목']첫 번째 항목두 번째 항목
세 번째 항목
네 번째 항목
다섯 번째 항목
8. 위에서는 href 속성 값과 동일한 a 태그의 모든 속성을 찾기 위해 절대 경로를 사용했습니다. 찾을 상대 경로 l 상대 경로 아래의 li 태그 아래에 있는 a 태그 아래에 있는 href 속성의 값입니다. a 태그 뒤에는 //가 필요합니다.
html = etree.HTML(wb_data) html_data = html.xpath('//li/a//@href') print(html_data) for i in html_data: print(i)
인쇄:
['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']link1.htmllink2.html
link3.html
link4.html
link5.html
9. 상대 경로에서 특정 속성을 확인하는 방법은 절대 경로에서도 마찬가지라고 할 수 있습니다.
html = etree.HTML(wb_data) html_data = html.xpath('//li/a[@href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]') print(html_data) for i in html_data: print(i.text)
인쇄:
[b723b8de943b6b7dda3734075f9b2d7e]두 번째 항목10에서 a 태그의 href 속성을 찾으세요. 인쇄:['다섯 번째 항목']다섯 번째 항목
11 두 번째 li 태그에서 a 태그의 href 속성을 찾습니다.
['네 번째 항목' ]네 번째 항목html = etree.HTML(wb_data) html_data = html.xpath('//li[last()]/a/text()') print(html_data) for i in html_data: print(i)인쇄:
12. 페이지에 있는 태그의 xpath 경로를 추출하면 다음 그림을 볼 수 있습니다.
일반적으로 사용되는html = etree.HTML(wb_data) html_data = html.xpath('//li[last()-1]/a/text()') print(html_data) for i in html_data: print(i)설명: 모든 태그를 찾으려면 상대 경로를 사용하고, 속성 ID는 kw 라벨과 같습니다.
//*[@id="kw"]관련 권장 사항:
python 크롤러 실제 브라우저를 사용하여 웹 페이지를 여는 두 가지 방법 요약
위 내용은 Python 크롤러에서 xpath의 기본 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!