【问题标题】:How to get comment in XML tag from response use Scrapy?如何从响应使用 Scrapy 获取 XML 标记中的注释?
【发布时间】:2018-04-22 18:21:30
【问题描述】:

我收到了来自服务器的响应,如下面的代码。
我想在 <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>

【问题讨论】:

  • 您能发布一个指向您正在抓取的网站的链接吗? CDATA 的使用在这里似乎很不寻常。
  • 格式链接如:nhaccuatui.com/flash/…

标签: python xml scrapy


【解决方案1】:

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

所以你需要手动创建 lxml 树然后重新创建你的 Selector:

$ 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']

【讨论】:

    【解决方案2】:

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

    re= re.findall('<lyric><!\[CDATA\[(.*)\]\]></lyric>',XMLstring)
    

    【讨论】:

    • 我用 Scrapy 抓取数据 兄弟。
    • @NhatNgo你仍然可以在你的scrapy蜘蛛中包含正则表达式,而不是从正则表达式部分提取数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2021-12-13
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多