2016-10-25 10 views
0

を使用しています。これは、論文ではweb pageです。抽出するのに役立つ情報があります。カスタムタグでのテキストの抽出は、Scrapy

私はこの論文のタイトル、著者および要約を抽出したいと思います。だから私は次のコードを書いた:

class PublicationSpider(scrapy.Spider): 
    name = "publications" 
    start_urls = [ 
     'https://www.ncbi.nlm.nih.gov/pubmed/15721472', 
    ] 

    def parse(self, response): 
     for publication in response.css('div.rprt.abstract'): 
      yield { 
       'title': publication.css('h1::text').extract_first(), 
       'author': publication.css('div.auths > a::text').extract(), 
       'abstract': publication.css('div.abstr abstracttext::text').extract(), 
       'doi': publication.css('div.aux a::text').extract_first(), 
      } 

残念ながら、上記のコードは正しい内容を返すことができませんでした。 abstracttext要素はScrapyで認識できないようです。

h4に置き換えようとしましたが、スクリプトはうまくいっています。

abstracttextでコンテンツを抽出するにはどうすればよいですか?

+0

をあなたのコードは私のために動作します。 'scrap shell ' '' response.css( 'div.abstr abstracttext :: text') 'を実行し、結果がそこにあります。あなたの 'lxml'バックエンドが何らかの理由で答えを異なってレンダリングしているかもしれませんが、どのオペレーティングシステムを実行していますか? 'pip show lxml'を試してバージョンを教えてください。 – Granitosaurus

+0

@Granitosaurusはい、 'scrap shell'では動作しますが、Pythonスクリプトでは動作しません。 –

+0

あなたのスパイダーは私のために働きます。 'settings.py'を投稿できますか?あなたはミドルウェアやパイプラインを有効にしていますか?実行ログ全体を投稿することもできますか? 'scrap crawl spider 2>&1> output.log' – Granitosaurus

答えて

-1

次のxpathを取得値として使用できます。

title = publication.xpath("//div[@class='rprt_all']/div/h1/text()").extract() 
+0

'h1'では動作しますが、' abstracttext'というタグでは動作しません –

0

私は単にlxmlを使用して別の解決策を見つけた:

from lxml import html 
from requests import get as getRequest 

htmlPage = getRequest('https://www.ncbi.nlm.nih.gov/pubmed/15721472') 
htmlTree = html.fromstring(htmlPage.content) 

title    = htmlTree.xpath('//div[@class="rprt abstract"]/h1/text()') 
authors    = htmlTree.xpath('//div[@class="auths"]/a/text()') 
doi     = htmlTree.xpath('//dl[@class="rprtid"]/dd/a/text()') 
abstractHeadings = htmlTree.xpath('//div[@class="abstr"]/div/h4/text()') 
abstractTexts  = htmlTree.xpath('//div[@class="abstr"]/div/p/abstracttext/text()') 

参考:

関連する問題