2017-03-28 10 views
1

私は、新しいリリースのbandcamp.comの「Discover」の部分(rock-> rock-> new arrivals)からitem-titleを取得しようとしています。ページの関連するソースコードのwebcrawling - bandcamp.comからitem-titleを取得

scrapy shell 'https://bandcamp.com/?g=rock&s=new&p=0&gn=0&f=all&w=0' 

一部は次のようになります。

<div class="col col-3-12 discover-item"> 
      <a data-bind="click: playMe, css: { 'playing': playing }" class="item-link playable"> 
       <span class="item-img ratio-1-1"> 
        <img class="art" data-bind="src_art: { 'art_id': artId, 'format': 'art_tags_large' }" src="https://f4.bcbits.com/img/a1631562669_9.jpg"> 
        <span class="plb-btn"> 
         <span class="plb-bg"></span> 
         <span class="plb-ic"></span> 
        </span> 
       </span> 
       </a><a data-bind="attr: { 'href': itemURL }, text: title, click: playMe" class="item-title" href="https://reddieseloff.bandcamp.com/album/dead-rebel?from=discover-new">Dead Rebel</a> 
       <a data-bind="attr: { 'href': bandURL }, text: artist, click: playMe" class="item-artist" href="https://reddieseloff.bandcamp.com?from=discover-new">Red Diesel</a> 
       <span class="item-genre" data-bind="text: genre">rock</span> 

     </div> 

私はの助けを借りて、アイテムのタイトル(この例では「デッド反乱」)のテキストを取得しようとしましたxパス:

response.xpath('//div[@class="col col-3-12 discover-item"]//a[@class="item-title"]/text()').extract() 

ですが、何も返しません。

[] 

また、「item-artist」では動作しませんので、間違っていると思います。

何か助けていただきありがとうございます。

+0

- 私はscrapyするために使用されないことができますが、あなたは '// [@ class =" item-title "]'を試していますか?また、 'bs4'と提供された' html'を使って、あなたが望む 'Dead Rebel'テキストを得ることができました。興味ありますか?たぶん、あなたは 'bs4'と' scrap'コードを混在させることができます... –

+1

@ dot.Py 'bs4'は治療の' parsel'とまったく同じことをします。 – Granitosaurus

答えて

2

あなたが探しているデータはすべて、ページ本体の中の隠しファイルdivに隠されています。お使いのブラウザがWebページをロードすると
は、Javascriptを解凍し、このデータを表示する方法を指示し、scrapyはどんなjavscriptを実行していないので、あなたはこの自分をステップ実行する必要があります。

# all of the data is under "<div id="pagedata" data-blob=" attribute 
data = response.css('div#pagedata::attr(data-blob)').extract() 
import json 
data = json.loads(data[0]) 
# dig through this python dictionary to find your data 
(it has pretty much everything, even more than the page displays) 
+0

これは本当にすべてがあります。 pprint import pprintから'out = open( 'dict.txt'、 'w +')' 'pprint(data、out)' –

+1

あなたはデータをファイルに置くことができます'json.dumps(data、indent = 2)'を ''ファイルに出力する ''にして、テキストエディタやjsonツリーを表示する専用のソフトウェア、例えばこのオンラインのものでデータを検査することができます:http ://jsonviewer.stack.hu/ – Granitosaurus

関連する問題