2017-11-15 1 views
1

나는 야후 금융 페이지에서 값을 구문 분석하려고합니다. 나는 관심의 요소 (주식의 현재 가격) 검사 크롬을 사용이 간단한 스크립트에서 XPath를 사용 :xml - 노드에 의해 구문 분석

from lxml import html 
import requests 

page = requests.get('https://finance.yahoo.com/quote/VNQ?p=VNQ') 
tree = html.fromstring(page.content) 

print tree.xpath('//*[@id="quote-header-info"]/div[3]/div[1]/div/span[1]/text()') 

그러나, 내가 무엇을 얻을 것은 다음 span 태그의 텍스트 값입니다. 나는 크롬이 이전 텍스트 값을 얻지 못하게하는 xpath를 변경하려고 시도했다. 누군가 내가 잘못 갔다고 말할 수 있습니까?

+0

하드 코딩 된 모든 색인이 올바른가요? –

+0

예상 결과 게시 – RomanPerekhrest

+0

원하는 텍스트가 강조 표시된 Chrome 복사 경로에서 잘라 내기/붙여 넣기됩니다. 내가 이해할 수없는 두 가지 이유는 강조된 텍스트가 아닌 다음 span 태그의 텍스트에 대한 xpath 인 것처럼 보이는 이유입니다. 그리고 두 번째, 크롬이 잘못된 xpath를 제공한다고 가정 할 때, 바로 가기 때문에 올바른 패스를 얻기 위해 어떻게 변경합니까? – ihf

답변

0

이것이 원하는 가격이라면 페이지의 더 쉬운 곳에서 가져갈 수 있습니다. 예를 들어 제목 html 태그에이 태그가 들어 있습니다. 약간의 문자열 구문 분석을 사용하면 올바른 값을 얻을 수 있습니다. 값은 항상 첫 번째 공백 뒤에옵니다.

from lxml import html 
import requests 

page = requests.get('https://finance.yahoo.com/quote/VNQ?p=VNQ') 
tree = html.fromstring(page.content) 

title = tree.xpath('//title/text()')[0] 
value = title.split()[1] 

print(value) 
+0

감사합니다. 방금 스크립트를 실행 해 보았습니다 : > 파이썬 스택 트레이스 (최근 호출 마지막) : 파일 > "stack.py", 줄 8, > value = int (title.split() [1] ]) ValueError : 밑이 10 인 '(') int()에 대한 리터럴이 올바르지 않습니다. 이 내용을 더 자세히 살펴 보겠습니다. – ihf

+0

Int()없이 시도하십시오. 내 응답에서 코드를 업데이트했습니다. 이 기능이 작동하면 내 대답을 수락하십시오. –

+0

>>> lxml import html >>> 가져 오기 요청 >>> page = requests.get ('https://finance.yahoo.com/quote/VNQ?p=VNQ') >>> tree = html.fromstring (page.content) >>> title = tree.xpath ('// title/text()') [0] >>> value = title.split() [1] >>> print (값) : – ihf