>  기사  >  백엔드 개발  >  Python 크롤러에서 xpath의 기본 사용에 대한 자세한 설명

Python 크롤러에서 xpath의 기본 사용에 대한 자세한 설명

不言
不言원래의
2018-04-27 11:01:564417검색

이 글은 주로 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(&#39;/html/body/p/ul/li/a&#39;)

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(&#39;/html/body/p/ul/li/a/text()&#39;)

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(&#39;test.html&#39;)

html_data = html.xpath(&#39;//*&#39;)<br>#打印是一个列表,需要遍历

print(html_data)

for i in html_data:

  print(i.text)

html = etree.parse(&#39;test.html&#39;)

html_data = etree.tostring(html,pretty_print=True)

res = html_data.decode(&#39;utf-8&#39;)

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(&#39;/html/body/p/ul/li/a/@href&#39;)

for i in html_data:

  print(i)

인쇄:

link1.html

link2.html

link3.html

link4.html

link5.html

6 우리는 ElementTree 개체를 하나씩 가져오는 데 사용한다는 것을 알고 있습니다. 콘텐츠를 찾아야 하며, 데이터를 얻기 위해 목록을 탐색해야 할 수도 있습니다.

절대 경로 아래의 a 태그 속성이 link2.html과 동일한 것을 발견했습니다.

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;/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()&#39;)

print(html_data)

for i in html_data:

  print(i)

Print:

['두 번째 항목']

두 번째 항목

7 위에서는 모든 절대 경로(각 경로는 루트에서 시작)를 찾고, 아래에서는 상대 경로를 찾습니다. 예를 들어, 모든 li 태그 아래에서 태그 내용을 찾습니다.

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li/a/text()&#39;)

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(&#39;//li/a//@href&#39;)

print(html_data)

for i in html_data:

  print(i)

인쇄:

['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

link1.html

link2.html

link3.html

link4.html

link5.html

9. 상대 경로에서 특정 속성을 확인하는 방법은 절대 경로에서도 마찬가지라고 할 수 있습니다.

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li/a[@href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]&#39;)

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(&#39;//li[last()]/a/text()&#39;)

print(html_data)

for i in html_data:

  print(i)

인쇄:

['네 번째 항목' ]

네 번째 항목

12. 페이지에 있는 태그의 xpath 경로를 추출하면 다음 그림을 볼 수 있습니다.

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li[last()-1]/a/text()&#39;)

print(html_data)

for i in html_data:

  print(i)

설명: 모든 태그를 찾으려면 상대 경로를 사용하고, 속성 ID는 kw 라벨과 같습니다.

일반적으로 사용되는

//*[@id="kw"]

관련 권장 사항:


python 크롤러 실제 브라우저를 사용하여 웹 페이지를 여는 두 가지 방법 요약


위 내용은 Python 크롤러에서 xpath의 기본 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.