2017-05-19 11 views
0

Mit Xpath, wie extrahiere ich den Text des 'p' in der 'Beschreibung'?Wie kann ich XPath verwenden

<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> 

Dies sind die Zeilen Code, die ich schrieb. Ich habe meine Codezeilen wie folgt nach der Empfehlung von @romanperekrest zusammengestellt. Aber es funktioniert immer noch nicht.

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

zu sehen, [extract_unquoted()] (https://doc.scrapy.org/en/0.10.3/topics/selectors.#scrapy.selector.XPathSelector.extract_unquoted) –

+0

Ich entschuldige mich, ich habe die Seite auf dem Link untersucht, den Sie mir gegeben haben. Ich weiß, deine Antwort ist dort geschrieben, aber ich verstehe es nicht. Würden Sie mir bitte helfen? –

Antwort

1

XPath (> = 1.0.4) Lösung:

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

XPath Ergebnis:

İ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. 

Gebrauchte Funktionen:

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


Python 3.x Lösung mit xml.etree.ElementTree Modul:

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) 

Der Ausgang:

İ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

Vielen Dank für Ihren Kommentar. Wie kann ich diesen Code in der Python-Programmiersprache verwenden? –

+0

@DavutDURGUN, es war eine Antwort, kein Kommentar. Ich habe Python-Lösung hinzugefügt, überprüfen Sie – RomanPerekhrest

+0

Ich arbeite in Python 2.7, ich denke, diese Codes geben einen Fehler. –

Verwandte Themen