2016-08-24 4 views
0

나는 this pageXPath 쿼리 - 파이썬

떨어져 몇 가지 정보를 잡아하려고하지만 잡을 수 없었다 데이터의 세 가지가있다. 첫 번째 등급은 상단 근처의 YDS 옆에있는 '5.6'등급입니다. 두 번째는 FFA입니다 : P.Adamson, M.Peck 2008 년 7 월, FA : 옆에 있습니다. 세 번째는 Trad, 30 '이며 유형 옆에 나열되어 있습니다. 그것은 아직 몇 곳 있지만 같은 행운에 나와있는대로 내가 가지고있는

는 XPath 쿼리는, 내가 페이지에 대한 몇 가지 다른 장소에서 등급을 잡기 위해 노력했다

grade = tree.xpath('//[@id="rspCol800"]/div[1]/div[1]/span/table/tbody/tr[2]/td[2]/text()') 

length = tree.xpath('//*[@id="rspCol800"]/div[1]/div[1]/span/table/tbody/tr[1]/td[2]/text()') 

first_ascent = tree.xpath('.//*[@id="rspCol800"]/div[1]/div[1]/span/table/tbody/tr[3]/td[2]/text()/text()') 

이다. 당신이 사용하고있는 프레임 워크 어떤 도움을 크게

+0

을 시도했습니다 무엇 쿼리됩니까? 그들은 잘못된 결과를 찾습니까? 그들은 아무것도 찾지 못했습니까? 오류가 발생합니까? –

+0

그들은 전혀 발견하지 못합니다. 나는 txt 파일로 출력하고 다른 정보는 페이지 [text here]의 형태로 올 것이다. 그러나이 세 필드는 [ – factor2

답변

0

확실하지 감사하겠습니다하지만이 작동하는 것 같다 : 당신이

from lxml import html 
import urllib2 
req = urllib2.Request('http://www.mountainproject.com/v/my-other-woman-is-a-hand-crack/107465606') 
response = urllib2.urlopen(req) 
data = response.read() 
tree = html.fromstring(data) 
grade = tree.xpath('//div[@id="rspCol800"]/div[1]/div[1]/span/table/tr[2]/td[2]/span/text()')[1] 
length = tree.xpath('//*[@id="rspCol800"]/div[1]/div[1]/span/table/tr[1]/td[2]/text()')[0] 
first_ascent = tree.xpath('.//*[@id="rspCol800"]/div[1]/div[1]/span/table/tr[3]/td[2]/text()')[0] 

print grade, length, first_ascent 
+0

]을 만든다. 나는 5.6 등급뿐만 아니라 다른 모든 숨겨진 등급 (그 분야에 여러 가지 등급이 매겨져 있음)뿐만 아니라/xa0와 같은 문자들을 많이 포함하는 등급 쿼리에 대해서도 하나의 문제점을 가지고있었습니다. 저는 방금 파싱했습니다./xa0 다음에 나오는 첫 번째 (5.numberhere)를 잡아내는 문자열을 통해. 프레임 워크의 경우 lxml과 요청을 사용하여 처음 몇 라인이 약간 다르게 끝났지 만 아무 것도 변경하지 않았다고 생각합니다. 고마워요! – factor2

+0

흠, '학년'줄 끝의 '[1]'은 나에게 단 하나의 5.6을 부여받는 것처럼 보였습니다. 아마도 lib가 페이지를 다른 방식으로 트랜스 코딩한다고 요청할 수 있습니다. 또한 data = data.replace (" ", "")를 사용하여 원하지 않는 공백을 제거 할 수 있습니다 (즉, \ xa가있는 부분입니다). 또는 grade = grade.strip()을 수행하십시오. – Maksym