Programing

Python을 사용하여 HTML 구문 분석

c10106 2022. 3. 13. 10:25
반응형

Python을 사용하여 HTML 구문 분석

Python 목록/사전/객체 형태로 태그를 가져올 수 있는 Python용 HTML 파서 모듈을 찾고 있다.

양식의 문서가 있는 경우:

<html>
<head>Heading</head>
<body attr1='val1'>
    <div class='container'>
        <div id='class'>Something here</div>
        <div>Something else</div>
    </div>
</body>
</html>

그러면 HTML 태그의 이름이나 ID를 통해 중첩된 태그에 액세스할 수 있는 방법을 제공하므로 기본적으로 콘텐츠/텍스트를 가져올 수 있도록 요청하십시오.div으로 꼬리표를 달다.class='container' 되어 있는.body꼬리표 같은 거.

만약 당신이 Firefox의 "Inspect 요소" 기능(View HTML)을 사용했다면, 당신은 그것이 트리처럼 멋진 중첩 방식으로 모든 태그를 제공한다는 것을 알 것이다.

나는 빌트인 모듈을 선호하지만 그건 좀 무리한 요구일 수도 있다.


Stack Overflow와 인터넷 블로그에 대한 많은 질문들을 살펴보았는데, 대부분 BeautifulSoup이나 lxml 또는 HTMLParser를 제안하지만, 기능성을 세부적으로 설명하는 것은 거의 없고 단순히 어느 것이 더 빠르고 더 효과적인지에 대한 논쟁으로 끝난다.

그래서 나는 신체 태그 안에 들어 있는 class='container'가 포함된 div 태그의 내용/텍스트를 나에게 가져다 달라고 요청할 수 있다.

try: 
    from BeautifulSoup import BeautifulSoup
except ImportError:
    from bs4 import BeautifulSoup
html = #the HTML code you've written above
parsed_html = BeautifulSoup(html)
print(parsed_html.body.find('div', attrs={'class':'container'}).text)

내 생각엔 공연 설명이 필요 없을 거야. BeautifulSoup이 어떻게 작동하는지 읽어봐.공식 문서를 보십시오.

네가 찾고 있는 건 피커리야

pyquery: python을 위한 jquery 같은 도서관.

원하는 것의 예는 다음과 같다.

from pyquery import PyQuery    
html = # Your HTML CODE
pq = PyQuery(html)
tag = pq('div#id') # or     tag = pq('div.class')
print tag.text()

그리고 파이어폭스나 크롬의 검사 요소와 동일한 선택기를 사용한다.예를 들면 다음과 같다.

요소 선택기는 'div#mw-head.noprint'이다.

검사된 요소 선택기는 'div#mw-head.noprint'이다.파이커리에서는 이 선택기를 통과하면 된다.

pq('div#mw-head.noprint')

여기서 당신은 Python의 다른 HTML 파서들과 그들의 성능에 대해 더 많이 읽을 수 있다.비록 그 기사가 약간 날짜가 지났지만, 그것은 여전히 당신에게 좋은 개요를 제공한다.

Python HTML 파서 성능

BeautifulSoup이 내장되어 있지 않더라도 추천하고 싶어.단지 그런 종류의 일을 위해 일하는 것이 너무 쉽기 때문에.예:

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen('http://www.google.com/')
soup = BeautifulSoup(page)

x = soup.body.find('div', attrs={'class' : 'container'}).text

다른 파서 라이브러리와 비교lxml매우 빠른 속도:

그리고 와 함께cssselectHTML 페이지 스크래핑에도 쉽게 사용할 수 있음:

from lxml.html import parse
doc = parse('http://www.google.com').getroot()
for div in doc.cssselect('a'):
    print '%s: %s' % (div.text_content(), div.get('href'))

lxml.html 설명서

HTML 구문 분석에는 lxml을 권장한다. lxml 사이트에서 "HTML 구문 분석"을 참조하십시오.

내 경험에 따르면 아름다운 수프는 복잡한 HTML을 엉망으로 만든다. 나는 아름다운 수프가 파서가 아니라 매우 훌륭한 스트링 분석가이기 때문이다.

justext 라이브러리를 사용할 것을 권장:

https://github.com/miso-belica/jusText

사용법: Python2:

import requests
import justext

response = requests.get("http://planet.python.org/")
paragraphs = justext.justext(response.content, justext.get_stoplist("English"))
for paragraph in paragraphs:
    print paragraph.text

Python3:

import requests
import justext

response = requests.get("http://bbc.com/")
paragraphs = justext.justext(response.content, justext.get_stoplist("English"))
for paragraph in paragraphs:
    print (paragraph.text)

나는 EHP를 사용할 것이다.

https://github.com/iogf/ehp

여기 있다:

from ehp import *

doc = '''<html>
<head>Heading</head>
<body attr1='val1'>
    <div class='container'>
        <div id='class'>Something here</div>
        <div>Something else</div>
    </div>
</body>
</html>
'''

html = Html()
dom = html.feed(doc)
for ind in dom.find('div', ('class', 'container')):
    print ind.text()

출력:

Something here
Something else

참조URL: https://stackoverflow.com/questions/11709079/parsing-html-using-python

반응형