2016-08-24 8 views
2

그래서 여러 세포가 테이블에가있는 페이지 (http://canoeracing.org.uk/marathon/results/burton2016.htm) webscraping 해요 : I는 각 열을합니다 (긁어 다음 코드를 사용하고 는 CSS 셀렉터와 파이썬을 사용하여 테이블에서 여러 셀을 Webscraping

을 그래서 아래 하나) 이름을 긁어 발생합니다

import lxml.html 
from lxml.cssselect import CSSSelector 

# get some html 
import requests 

r = requests.get('http://canoeracing.org.uk/marathon/results/burton2016.htm') 
# build the DOM Tree 
tree = lxml.html.fromstring(r.text) 
# construct a CSS Selector 
sel1 = CSSSelector('body > table > tr > td:nth-child(2)') 
# Apply the selector to the DOM tree. 
results1 = sel1(tree) 
# get the text out of all the results 
data1 = [result.text for result in results1] 

불행하게도 그것은 단지 둘, 각 셀에서 이름을 반환합니다. webscraping tool Kimono에서 비슷한 것을 시도해 봤지만 둘 다 긁을 수있었습니다. 그러나 Kimono가 여러 웹 페이지에서 실행될 때 Python 코드를 보내려고합니다.

+1

'CSSSelector'를 사용할 필요가 없으므로 마지막 질문에 대한 대답으로'tree.cssselect'를 호출 할 수 있습니다. –

답변

2

일부 셀에는 <br>으로 구분 된 여러 텍스트 노드가 포함되어 있습니다. 이런 경우, 그들에게 모든 텍스트 노드을 찾아 가입 : 또한 .text_content() 방법을 사용할 수도

OSCAR HUISSOON, FREJA WEBBER 
ELLIE LAWLEY, RHYS TIPPINGS 
ALLISON MILES, ALEX MILES 
NICOLA RUDGE, DEBORAH CRUMP 

:하지만, 스크린 샷에서 제공하는 행의 경우

data1 = [", ".join(result.xpath("text()")) for result in rows] 

을, 당신은 얻을 것 결과에서 OSCAR HUISSOONFREJA WEBBER 같은 것을 얻는 텍스트 노드 사이의 분리 문자를 잃게됩니다.

관련 문제