2017-05-19 16 views
0

Xpathを使用すると、「説明」に「p」のテキストを抽出するにはどうすればよいですか?XPathの使用方法

<item> 
      <link>http://spor.haber7.com/futbol/haber/2335589-ispanya-avrupa-sampiyonu</link> 
      <guid>2335589</guid> 
      <pubDate>Sat, 20 May 2017 00:24:00 +0300</pubDate> 
      <category><![CDATA[Futbol]]></category> 
      <title><![CDATA[Ä°spanya Avrupa Åampiyonu]]></title> 
      <description><![CDATA[<a href="http://spor.haber7.com/futbol/haber/2335589-ispanya-avrupa-sampiyonu" target="_blank"><img src="http://image.cdn.haber7.com//haber/haber7/thumbs/2017/20/ispanya_avrupa_sampiyonu_1495229064_1854.jpg" /></a><p>İspanya, normal süresi 2-2 berabere sona eren final maçında İngiltere'ye penaltı atışları sonucu 4-1 üstünlük kurarak kupanın sahibi oldu.</p>]]></description> 
     </item> 

これは私が書いたコード行です。 @romanperekhrestの勧告に従って、以下のように私のコード行を整理しました。しかし、それはまだ動作しません。

from scrapy.spiders import CrawlSpider 
import xml.etree.ElementTree as ET, re 


class aliSpider(CrawlSpider): 
    name = "aksam_spider" 
    start_urls = ['http://www.aksam.com.tr/cache/rss.xml'] 

    def parse(self, response): 
     SET_SELECTOR = '/rss/channel/item' 

     baslik_SELECTOR = './/title/text()' 
     icerik_SELECTOR = './/description/text()' 
     link_SELECTOR='.//link/text()' 
     tarih_SELECTOR='.//pubDate/text()' 


     for brickset in response.xpath(SET_SELECTOR): 
      tree = ET.parse(brickset.xpath(icerik_SELECTOR).extract_first()) 
      root = tree.getroot() 
      desc = re.search(r'<p>([^<>]+)</p>', root.find("description").text).group(1) 

      yield { 
       'baslik': brickset.xpath(baslik_SELECTOR).extract_first(), 
       'icerik': desc, 
       'link': brickset.xpath(link_SELECTOR).extract_first(), 
       'tarih':brickset.xpath(tarih_SELECTOR).extract_first() 
      } 
+1

[(extract_unquoted)]を見て(HTTPS:/ /doc.scrapy.org/en/0.10.3/topics/selectors.html#scrapy.selector.XPathSelector.extract_unquoted) –

+0

私はあなたが私に与えたリンクのページを調べたことをお詫びします。私はあなたの答えはそこに書かれていることを知っているが、私は理解していない。私を助けてくれますか? –

答えて

1

のXPath(> = 1.0.4)溶液:

substring-before(substring-after(/item/description, "<p>"), "</p>") 

XPathの結果:

İspanya, normal süresi 2-2 berabere sona eren final maçında İngiltere'ye penaltı atışları sonucu 4-1 üstünlük kurarak kupanın sahibi oldu. 

使用される機能:

https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/substring-afterhttps://developer.mozilla.org/en-US/docs/Web/XPath/Functions/substring-before


パイソンxml.etree.ElementTreeモジュールと 3.xの溶液:

import xml.etree.ElementTree as ET, re 

tree = ET.parse("test.xml") 
root = tree.getroot() 
desc = re.search(r'<p>([^<>]+)</p>',root.find("description").text).group(1) 
print(desc) 

出力:

İspanya, normal süresi 2-2 berabere sona eren final maçında İngiltere'ye penaltı atışları sonucu 4-1 üstünlük kurarak kupanın sahibi oldu. 
+0

ご意見ありがとうございます。このコードをPythonプログラミング言語でどのように使用できますか? –

+0

@DavutDURGUN、それは答えであり、コメントではありませんでした。私はPythonソリューションを追加しました。それを確認してください。 – RomanPerekhrest

+0

私はPython 2.7で作業しています。これらのコードはエラーを起こしていると思います。 –

関連する問題