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'이다.파이커리에서는 이 선택기를 통과하면 된다.
pq('div#mw-head.noprint')
여기서 당신은 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
매우 빠른 속도:
- http://blog.dispatched.ch/2010/08/16/beautifulsoup-vs-lxml-performance/
- http://www.ianbicking.org/blog/2008/03/python-html-parser-performance.html
그리고 와 함께cssselect
HTML 페이지 스크래핑에도 쉽게 사용할 수 있음:
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'))
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를 사용할 것이다.
여기 있다:
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
'Programing' 카테고리의 다른 글
동일한 구성 요소의 메서드 내에서 VueJS 수명 주기 후크 호출 (0) | 2022.03.13 |
---|---|
Navigator를 사용하여 react original로 동일한 경로를 렌더링할 수 있는가? (0) | 2022.03.13 |
Vuetify에서 v-card 구성 요소의 중앙에 콘텐츠를 맞추는 방법 (0) | 2022.03.13 |
vuex에서 스토어 값을 보는 방법? (0) | 2022.03.13 |
Python 유니코드 문자열에서 억양을 제거하는 가장 좋은 방법은 무엇인가? (0) | 2022.03.13 |