2017-11-19 2 views
1

이 HTML 스 니펫이 주어지면, href = 뒤에 어떻게 파이썬 패키지 요청이나 xlml을 사용하여 인용 문자열을 찾을 수 있습니까?HTML 머리글에서 인용 문자열을 가져 오는 방법은 무엇입니까?

<dl> 
    <dt><a href="oq-phys.htm"> 
     <b>Physics and Astronomy</b></a> 
    <dt><a href="oq-math.htm"> 
     <b>Mathematics</b></a> 
    <dt><a href="oq-life.htm"> 
     <b>Life Sciences</b></a> 
    <dt><a href="oq-tech.htm"> 
     <b>Technology</b></a> 
    <dt><a href="oq-geo.htm"> 
     <b>Earth and Environmental Science</b></a> 
</dl> 
+0

코드 조각 다음 파이썬 코드에서이다 : ( 페이지 = requests.get ('http://www.openquestions.com') 인쇄 page.text) – frogfanitw

+0

당신은 비슷한 것들 인 것처럼 요청과 XML에 대해 묻는 것으로 나를 혼란스럽게합니다. html 페이지의 내용을 가져 오시겠습니까? 아니면 내용을 파싱하고 특정 부분을 찾으시겠습니까? – mrCarnivore

답변

1

import requests 
import lxml.etree as LH 
html_string = LH.fromstring(requests.get('http://openquestions.com').text) 

은 이후에 인용 된 문자열을 찾을 수 href=

짧은 requests + beautifulsoup 솔루션 :

import requests, bs4 

soup = bs4.BeautifulSoup(requests.get('http://.openquestions.com').content, 'html.parser') 
hrefs = [a['href'] for a in soup.select('dl dt a')] 
print(hrefs) 

출력 :

['oq-phys.htm', 'oq-math.htm', 'oq-life.htm', 'oq-tech.htm', 'oq-geo.htm', 'oq-map.htm', 'oq-about.htm', 'oq-howto.htm', 'oqc/oqc-home.htm', 'oq-indx.htm', 'oq-news.htm', 'oq-best.htm', 'oq-gloss.htm', 'oq-quote.htm', 'oq-new.htm'] 
+0

이것은 나를 위해 일했습니다. – frogfanitw

0

위 예제의 경우 위의 스 니펫을 포함하는 html_string이 있다고 가정합니다. for quoted_link in html_string.xpath('//a'): print(quoted_link.attrib['href'], quoted_link.text_content())

+0

질문에 중요한 정보를 빠뜨린 것 같습니다. 그러나 결과는 오류였습니다. 노력해 주셔서 감사합니다! – frogfanitw

0

이 고양이를 스킨 케어하는 데는 많은 방법이 있습니다. 나는 다음과 같이 쓴 이유

import requests 
from lxml.html import fromstring 

req = requests.get('http://www.openquestions.com') 
resp = fromstring(req.content) 
hrefs = resp.xpath('//dt/a/@href') 
print(hrefs) 

편집

:

  • 내가 CSS에 XPath를 선호 여기에 (명시 적) for 루프를 포함하지 않는 requests/lxml 솔루션입니다 선택자
  • 빠르다.

벤치 마크 :

import requests,bs4 
from lxml.html import fromstring 
import timeit 

req = requests.get('http://www.openquestions.com').content 

def myfunc() : 
    resp = fromstring(req) 
    hrefs = resp.xpath('//dl/dt/a/@href') 

print("Time for lxml: ", timeit.timeit(myfunc, number=100)) 

############################################################## 

resp2 = requests.get('http://www.openquestions.com').content 

def func2() : 
    soup = bs4.BeautifulSoup(resp2, 'html.parser') 
    hrefs = [a['href'] for a in soup.select('dl dt a')] 

print("Time for beautiful soup:", timeit.timeit(func2, number=100)) 

출력 :

('Time for lxml: ', 0.09621267095780464) 
('Time for beautiful soup:', 0.8594218329542824)