파이썬 목록 / 사전 / 객체의 형태로 태그를 얻는 데 도움이되는 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의 “요소 검사”기능 (HTML보기)을 사용했다면 모든 태그를 나무처럼 멋진 중첩 방식으로 제공한다는 것을 알게 될 것입니다.
내장 모듈을 선호하지만 너무 많이 요구할 수 있습니다.
나는 Stack Overflow에 대한 많은 질문과 인터넷상의 몇 가지 블로그를 겪었으며 대부분은 BeautifulSoup 또는 lxml 또는 HTMLParser를 제안하지만 이러한 기능 중 일부는 기능을 자세히 설명하지 않으며 어떤 것이 더 빠르고 더 효율적인지에 대한 토론으로 끝납니다.
답변
그래서 body 태그 내에 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입니다 .
pyquery : 파이썬을위한 jquery와 같은 라이브러리.
원하는 것의 예는 다음과 같습니다.
from pyquery import PyQuery
html = # Your HTML CODE
pq = PyQuery(html)
tag = pq('div#id') # or tag = pq('div.class')
print tag.text()
또한 Firefox 또는 Chrome의 inspect 요소와 동일한 선택기를 사용합니다. 예를 들면 다음과 같습니다.
검사 된 요소 선택기는 ‘div # mw-head.noprint’입니다. 따라서 pyquery에서는이 선택기를 전달하면됩니다.
pq('div#mw-head.noprint')
답변
여기서 파이썬의 다양한 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 구문 분석”을 참조하십시오 .
내 경험상 Beautiful Soup은 복잡한 HTML을 엉망으로 만듭니다. 나는 Beautiful Soup이 파서가 아니라 매우 우수한 문자열 분석기이기 때문이라고 생각합니다.
답변
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
파이썬 3 :
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
