如何从响应使用Scrapy获取XML标记中的注释?

时间:2018-04-22 18:21:31

标签: python xml scrapy

我的服务器响应如下代码。
我想在<lyric></lyric>标签之间获取CDATA部分中的链接。

<lyric><![CDATA[https://lrc-nct.nixcdn.com/2018/02/21/f/b/1/1/1519207822262.lrc]]></lyric>
<bgimage><![CDATA[https://avatar-nct.nixcdn.com/singer/avatar/2018/02/25/e/b/b/b/1519558155015_600.jpg]]></bgimage>
<avatar><![CDATA[https://avatar-nct.nixcdn.com/song/2018/02/26/f/8/3/d/1519640161758.jpg]]></avatar>
<coverimage><![CDATA[https://avatar-nct.nixcdn.com/song/2018/02/26/f/8/3/d/1519640161758_500.jpg]]></coverimage>
<newtab><![CDATA[https://www.nhaccuatui.com/nghe-si-hang-bingboong.html]]></newtab>

2 个答案:

答案 0 :(得分:0)

您想获取链接(&#39; https://lrc-nct.nixcdn.com/2018/02/21/f/b/1/1/1519207822262.lrc&#39;)? 您可以将xml内容转换为字符串,并使用正则表达式来提取链接。

image_name=test_batch.filenames[0]

答案 1 :(得分:0)

默认情况下,lxml剥离了cdata,不幸的是parsel.Selector scrapy正在使用不公开该选项。

因此,您需要手动创建lxml树,然后重新创建选择器:

$ scrapy shell "https://www.nhaccuatui.com/flash/xml?html5=true&key1=59f0ae8a89cea4a0eb2c3b7e40208f26"
from lxml.etree import XMLParser
from parsel import Selector

# lets fix selector
parser = XMLParser(strip_cdata=False)
root = etree.fromstring(response.body, parser=parser, base_url=response.url)
selector = Selector(root=root)

# now finding CDATA values
selector.xpath('//lyric/text()').extract()
[OUT]: ['https://lrc-nct.nixcdn.com/2018/02/07/a/a/e/f/1517979335534.lrc']