2014-02-18 2 views
0

나는 scrapy를 사용하여이 테이블에서 일부 책 링크를 추출하고 싶습니다.Scrapy : 테이블에있는 링크의 xpath

표는 다음과 같다 :

<table id="table_text"> 

<tbody> 

<tr > 
<td>15/02/2014</td> 
<td><a href="/book_1.html">Book 1</a></td> 
<td>The Author</td> 
<td> <a href="/tag1">tag1</a> <a href="/tag2">tag2</a> </td> 
<td>Genre</td> 
</tr> 

를 추출 링크 같아야

/book_1.html 

제가

def parse(self, response): 
    hxs = Selector(response) 
    hxs = Selector(response) 
    links = hxs.xpath('//table[@id="table_text"]//tr//td[2]//a//@href') 

하지만 print links 인 사용 선택기 빈 출력을 도시 : []

내가 사용했던 xpath의 문제점을 알고 싶습니다.

+0

완전한 재생산기 (즉, 우리 스스로를 재생산하여 재현 할 수있는 방법)가 도움이 될 것입니다. 페이지를 공개적으로 사용할 수 있습니까? –

+0

그건 그렇고, 당신이 필요로하는 것보다 훨씬 더 많은'/'을 사용하고 있습니다. 이들 중 많은 수가 단일 홉 일뿐입니다. –

+1

당신은 XPath가 작동하고 있다고 묘사 한 것과 함께'/ table [@ id = "table_text"] // tr/td [2]/a/@ href'로 단순화 할 수 있습니다. 더 많은 문맥을 줄 수 있습니까? 더 많은 HTML? 응답에서 몸을 확인 했습니까 * 실제로 당신이 생각하는 것입니까? (예 : JS는 어떤 치료법에서 가져온 것과 다른 HTML을 표시 할 수 있습니까?) – Robin

답변

2

제공된 정보를 사용하면 XPath가 올바르게 작동합니다.

//table[@id="table_text"]//tr/td[2]/a/@href 

으로 단순화 할 수 있지만 버전에 따라 올바른 노드가 반환됩니다.

치료와 관련하여 예기치 않은 문제가 발생하면 예상 한 HTML을 항상 확인하십시오. scrapy가 자바 스크립트를 처리하지 않으며 (일부 브라우저는 HTML을 위생적으로 처리하려고 시도하기 때문에) 브라우저와 검색된 HTML은과 다를 수 있습니다. 당신이 response.body의 함량이 검사 당신이을 기대해야하는지 이유를

는 그입니다. 그렇지 않은 경우 해결 방법을 찾아야합니다.