2017-10-23 16 views
2

최근에 scrapy을 (를) 배우게되었습니다. 나는 CSS Selector을 사용하여 div에서 width을 선택하려고하는데, 그게 가능하지 않습니다. 나는 해결책을 찾기 위해 많은 노력을했지만 언제든지 css 선택자 대신 xpath을 사용하는 것이 좋습니다.데이터 스크래핑 : Scrapy CSS를 사용하여 스타일 태그에서 너비를 선택하는 방법은 무엇입니까?

HTML 코드는 다음과 같습니다

<div class="stars-container"> 
    <div class="stars" style="width: 60.606%"> Rating</div> 
</div> 

scrapy shell URL에 의해 response을받은 후, 내 시도가 html 위 테에서 width을 선택하는 것은 :

response.css('.stars-container .stars ::attr(width)') 
response.css('.stars-container ::attr(width)') 

그것은 나에게 큰 기쁨이 될 것입니다 누군가가이 문제에서 나를 도우면 쉽게 배우십시오. 고맙습니다.

답변

0

귀하의 도움을받을 수 있습니다.

response.css(".stars-container .stars").xpath('@style').extract() 
+0

Python re 당신 @rana 감사 여기 문서를 찾을 수 있습니다 liberary

response.css('.stars-container .stars ::attr(style)').re_first(r'width:\s+(\d+.\d+)') 

또한 파이썬 REGX과 함께 편안하게. –

2

방금 ​​폭 값을 얻으려면 순수 CSS 솔루션을 주장하는 경우, 여기 당신은 간다 :

여기
response.css('.stars-container .stars::attr(style)').re_first('width:\s*(\d+\.\d+)\s*%') 
+0

귀하의 기여에 대해 @Tomas 감사합니다. 그것은 정말로 나에게 좋을거야. –

0

는 폭을 얻을 수있는 방법이다. 이 쿼리를 해결하기 위해 관심을 보여주는

+0

@afraz 솔루션을 제공해 주셔서 감사합니다. '.re_first (r ': \ s + (\ d +. \ d +)')'의 목적이 무엇인지 설명해 주시겠습니까? 그것은 나를 위해 정말로 도움이 될 것입니다. –

+1

Scrapy는 re 라이브러리를 내부적으로 사용합니다. 이 방법에서는 문자열에서 ":"을 찾은 다음 그 뒤에 공백이 없으면 쉼표와 임의의 숫자가 오는 임의의 숫자를 찾습니다. re_first는 첫 번째 일치하는 경우 만 리턴합니다. "()"안의 모든 표현이 선택되어 있는지 확인하십시오 –

+0

안내를 제공하기 위해 @AfrazAhmad에 감사드립니다. –