2017-06-21 106 views
0

我是scrapy世界的新成員...有人能幫助我嗎?scrapy:當多個div完全相同時只提取一個div

您知道如何在此代碼中抓取第一個元素列表(即只是價格「Prix」)嗎?事實上,我只是想要一個價格和產品數量的價格清單,但它給了我一切(價格,品牌 - 我已經刪除了這部分,顏色 - 我也刪除了這部分,星星等)。

<div id="facetsList" class="mgFacetContent"> 
<div class="jsFacetListing mgFacetListing mgFOpen"> 
    <div class="jsFacetTitle mgFTitle"> 

#just here ---> 

    <span>Prix</span> 

#<----- 

    <span class="mgFIcon"></span> 
    </div> 
    <div class="mgFAllList"> 
    <input type="hidden" name="FacetForm.SelectedFacets.Index" value="0" /> 
    <ul class="mgFList"> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[_1200]"> 
     <span title="&lt;10 € (276)"><10 € (276)</span> 
     </label> 
     </li> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[800_2500]"> 
     <span title="10 &#224; 20 € (314)">10 à 20 € (314)</span> 
     </label> 
     </li> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[1900_5500]"> 
     <span title="20 &#224; 50 € (404)">20 à 50 € (404)</span> 
     </label> 
     </li> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[4800_10500]"> 
     <span title="50 &#224; 100 € (232)">50 à 100 € (232)</span> 
     </label> 
     </li> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[9500_21500]"> 
     <span title="100 &#224; 200 € (259)">100 à 200 € (259)</span> 
     </label> 
     </li> 
    </ul> 
    <ul class="mgFListMore"> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[19000_51500]"> 
     <span title="200 &#224; 500 € (161)">200 à 500 € (161)</span> 
     </label> 
     </li> 
     <li> 
     <label><input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[48000_110000]"> 
     <span title="500 &#224; 1000 € (56)">500 à 1000 € (56)</span> 
     </label> 
     </li> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[0]" value="f/7/[90000_]"> 
     <span title="1000 € et + (22)">1000 € et + (22)</span> 
     </label> 
     </li> 
    </ul> 
    </div> 
    <div class="mvFLink mgFLinkSeeMore jsFLink">de choix</div> 
    </div> 
    <div class="jsFacetListing mgFacetListing mgFOpen"> 
    <div class="jsFacetTitle mgFTitle"> 
    <span>Avis clients</span> 
    <span class="mgFIcon"></span> 
    </div> 
    <div class="mgFAllList"> 
    <input type="hidden" name="FacetForm.SelectedFacets.Index" value="3" /> 
    <ul class="mgFList"> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[3]" value="f/374/[300_500]"> 
     <span title="3 &#233;toiles et + (77)">3 étoiles et + (77)</span> 
     </label> 
     </li> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[3]" value="f/374/[400_500]"> 
     <span title="4 &#233;toiles et + (63)">4 étoiles et + (63)</span> 
     </label> 
     </li> 
     <li> 
     <label> 
     <input type="checkbox" name="FacetForm.SelectedFacets[3]" value="f/374/[500_500]"> 
     <span title="5 &#233;toiles (30)">5 étoiles (30)</span> 
     </label> 
     </li> 
    </ul> 
    <ul class="mgFListMore"></ul> 
    </div> 
    </div> 

我嘗試了很多事情,例如Xpath:

 if response.xpath('//div[@class="jsFacetListing mgFacetListing mgFOpen"]/div[@class="mgFAllList"]/ul/li/label/input[@name="FacetForm.SelectedFacets[0]"]'): 
      nbproducts = response.xpath('/span/text()').re(r'\u20ac \s*(.*)') 
      avgcost = response.xpath('../span/text()').re(r'\s*(.*)') 

但我不認爲它的工作這樣的...

非常感謝

+0

嘗試使用XPath,而不使用html序列 –

+0

我編輯帖子;)我正在嘗試很多東西,但都沒有工作 –

回答

1

你可以在您的xpath表達式中使用索引:

response.xpath('(//div[@class="jsFacetTitle mgFTitle"])[1]/span[1]/text()').extract() 
['Prix'] 
+0

認真?這麼簡單,我沒有想過......非常感謝 –

+0

你知道.re(r'')是如何工作的嗎?我不知道r是什麼意思...... –

+0

@Postrique在Python中,字符串的前綴r表示原始字符串字面量,請參閱相關問題:https://stackoverflow.com/questions/2081640/what-正是-DO-U和R-串旗-DO功能於蟒蛇和乜是,原始的字符串-1 – Granitosaurus