2016-07-28 7 views
0

Scrapyを使用して、特定の記事を含むWebページをクロールしています。XpathまたはCssセレクタを使用して空のDivを返すScrapyを使用する

私はdiv内の情報をクラス "return"で取得しようとしています。私がScrapy XpathまたはCssセレクタを使用すると、divが返す大きな問題は常に空です。

私は抽出しようとしている事業部:

<div class="return"> 

         <p><strong>Conditionnement : </strong></p> 
         <p class="one-product-detail">2 colis :<br> 
         L178xl106xH80&nbsp;72kg<br>L178xl112xH80&nbsp;60kg<br> 
         <span itemprop="weight" alt="3fin" class="hidden" hidden="">132kg</span></p> 

</div> 

私のスパイダーコード:

import scrapy 
from alinea.items import AlineaItem 

class AlineaSpider(scrapy.Spider): 
    name = "alinea" 
    start_urls = [ 
     "http://www.alinea.fr/", 
    ] 
    def parse(self, response): 
     # ref = input("Enter Item Reference ?\n") 
     #50 
     # link = "http://www.alinea.fr/alinea_fredhopper/catalogSearch_result/products/search/" + str(ref) 
     link = "http://www.alinea.fr/alinea_fredhopper/catalogSearch_result/products/search/" + str(50) 
     print(link) 
     return scrapy.Request(link, 
           callback=self.parse_page2) 

    def parse_page2(self, response): 
     self.logger.info("Visited %s", response.url) 

     for sel in response.xpath('//li[contains(@itemprop,"title")]/text()'): 
      print("**************") 
      print("Description") 
      print(sel.extract()) 
      print("**************") 

     # print("------------------------------------------------------------------") 
     # 
     # for sel in response.xpath('//*[@class="delivery"]'): 
     # 
     #  print("**************") 
     #  print("Details") 
     #  print(sel.extract()) 
     #  print("**************") 

     print("------------------------------------------------------------------") 

     for sel in response.css('[class="return"]'): 

      print("**************") 
      print("Details") 
      print(sel.extract()) 
      print("**************") 

マイターミナルログイン:

2016-07-28 12:57:21 [alinea] INFO: Visited http://www.alinea.fr/orca-canape-angle-gauche-droit-convertible-gris.html 
************** 
Description 

        Orca - Canapé CONVERTIBLE d'angle gauche ou droit gris     
************** 
------------------------------------------------------------------ 
************** 
Details 
<div class="return"> 



</div> 
************** 
+2

「div」はHTMLソースでは空です。製品のオプションを選択するまでは、Chromeブラウザでも空です。私はhttp://www.alinea.fr/orca-canape-angle-gauche-droit-convertible-gris.htmlでテストしました。後のデータは、おそらくJavaScript経由で読み込まれます。 Scrapy自体はHTMLをダウンロードするだけで、JavaScriptをインタープリットしません。 XHR呼び出しを再現するか、SeleniumやSplashのようなJavaScriptレンダリングツールを使用する必要があります。 –

答えて

0

あなたが訪問したpageにはそのコンテンツがありませんdivだからあなたはあなたが得たものを手に入れなければならない。

他のページに変更すると、たとえばhttp://www.alinea.fr/orca-canape-angle-droit-gris-fonce.htmlと表示され、divが表示され、空ではありません。シェルから

出力:scrapy shell 'http://www.alinea.fr/orca-canape-angle-droit-gris-fonce.html'

In [1]: response.xpath('//div[@class="return"]').extract() 
Out[1]: [u'<div class="return">\n\n   \n<p><strong>Conditionnement : </strong></p>\n<p class="one-product-detail">\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t2 colis :<br>\n\t\t\t\t\t\t\t\t\t L178xl106xH80\xa055kg<br>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t L178xl112xH80\xa053kg<br>\t\t\t\t\t\t<span itemprop="weight" alt="3fin" hidden class="hidden">108kg</span></p>\n  \n</div>'] 

テキストをしたい場合/text()だけで、あなたのケースの空白には、divの下で直接テキスト与えるので、あなたは、代わりに//text()を使用します。

In [2]: response.xpath('//div[@class="return"]/text()').extract() 
Out[2]: [u'\n\n   \n', u'\n', u'\n  \n'] 

In [3]: [x.strip() for x in response.xpath('//div[@class="return"]//text()').extract()]                                        
Out[3]: 
[u'', 
u'Conditionnement :', 
u'', 
u'2 colis :', 
u'L178xl106xH80\xa055kg', 
u'L178xl112xH80\xa053kg', 
u'', 
u'108kg', 
u''] 
関連する問題