2017-10-19 4 views
0

나는 스플래시를 사용하여 스플래시를 학습하고 js 사용 가능 페이지의 결과를 긁어 모으기 위해 거미를 빌드합니다. 내 스파이더가 작동하고 js 페이지에 대한 결과를 반환합니다. 그러나, https://www.zara.com/us/en/bejewelled-appliqu%C3%A9-dress-p07854034.html?v1=4818592&v2=733885스플래시가 결과를 반환하지 않음

xpath used: //*[contains(concat(" ", @class, " "), concat(" ", "_product-price", " "))]//span/text() 

위의 XPath는 브라우저에서 결과를 반환하지 않습니다하지만 scrapy를 통해 호출 할 때 결과를 반환하지 않는 링크에서 가격을 반환하지 않습니다. 여기 내 거미는 당신이 사이트에서 가격은 반환되지 않는 이유를 알아내는 데 도움 주실 래요

yield scrapy.Request(url, callback=self.parse_page, dont_filter=True, meta={'splash': {'args': {'wait': 5,},'endpoint': 'render.html',}}) 

를 호출이야?

감사합니다. //*[contains(concat(" ", @class, " "), concat(" ", "_product-price", " "))]//span/text()하거나 //*[contains(concat(" ", @class, " ")," _product-price "))]//span/text()

의 XPath @ 클래스 = 술어는 당신이 가지고있는 것과 같은 여러 클래스 (공백으로 구분 클래스)이 작동하지 않습니다 - 당신의 XPath는이

+0

코드 또는 구성 때문인지 여부를 확인하려면 스플래시에서 페이지 결과의 스크린 샷을 찍은 다음 가격을 확인하거나 문서 트리를 확인하십시오. – jabargas

+0

아, 그냥 코드를 살펴 봤는데, 당신의 xpath가 잘못되었다고 생각합니다. – jabargas

답변

2

Splash 렌더링 된 HTML 출력에 가격이 전혀 표시되지 않는 것이 가장 좋습니다 (웹 브라우저의 Splash 콘솔에 URL을 넣는 것이 가장 좋음). 8050 포트에서 볼 수 있습니다. 렌더링 된 출력). 페이지가 올바르게 렌더링되지 않는 경우 스플래시 FAQ부터 시작하십시오. 귀하의 경우 솔루션은 의 Splash로 Docker에 대한 --disable-private-mode 시작 옵션을 사용하거나 LUA 스크립트에 splash.private_mode_enabled = false을 설정하여 해결할 수 있습니다. 개인 모드를 사용하지 않으면 페이지가 올바르게 렌더링됩니다.

+0

Tomáš! 그게 효과가! – user6055239

0

사용. 요소를 얻으려면 contains()

+0

xpath를 사용해 보았습니다. 운이 좋으면 지정하지 않았습니까? 거기에 뭔가 잘못 될 수 있습니까? // * [concat ("", @class, "), concat (" ", _product-price", ""))] // span/text() – user6055239

관련 문제