使用Xpath,如何在'description'中提取'p'的文本?
<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()
}
答案 0 :(得分:1)
XPath (&gt; = 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-after https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/substring-before
带有xml.etree.ElementTree模块的Python 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.