如何使用HtmlXPathSelector(Scrapy)将结果返回为HTML

2024-03-28 16:08:43 发布

您现在位置:Python中文网/ 问答频道 /正文

如何检索包含在标记中的所有HTML?

hxs = HtmlXPathSelector(response)
element = hxs.select('//span[@class="title"]/')

可能是这样的:

hxs.select('//span[@class="title"]/html()')

编辑: 如果我查看documentation,我只看到返回新XPathSelectorList的方法,或者只看到标记中的原始文本。 我不想检索新的列表或只是文本,而是要检索标记中的源代码HTML。 e、 g.:

<html>
    <head>
        <title></title>
    </head>
    <body>
        <div id="leexample">
            justtext
            <p class="ihatelookingforfeatures">
                sometext
            </p>
            <p class="yahc">
                sometext
            </p>
        </div>
        <div id="lenot">
            blabla
        </div>
    an awfuly long example for this.
    </body>
</html>

我想做一个类似hxs.select('//div[@id="leexample"]/html()')的方法,该方法将返回其中的HTML,如下所示:

justtext
<p class="ihatelookingforfeatures">
    sometext
</p>
<p class="yahc">
    sometext
</p>

我希望我澄清了我问题的模糊性。

如何从Scrapy中的HtmlXPathSelector获取HTML?(也许是一个不在斯卡比范围内的解决方案?)


Tags: 方法标记文本dividtitlehtmlselect
3条回答

虽然很晚了,我还是把这个留了下来。

我做的是:

html = ''.join(hxs.select('//span[@class="title"]/node()').extract())

或者如果我们想匹配不同的节点:

elements = hxs.select('//span[@class="title"]')
html = [''.join(e) for e in elements.select('./node()')]

XpathSelectorList上调用.extract()。它将返回包含所需HTML内容的unicode字符串列表。

hxs.select('//div[@id="leexample"]/*').extract()

更新

# This is wrong
hxs.select('//div[@id="leexample"]/html()').extract()

/html()不是有效的scrapy选择器。要提取所有子项,请使用'//div[@id="leexample"]/*''//div[@id="leexample"]/node()'。注意,node()将返回textNode,结果类似于:

[u'\n   ',
 u'&lta href="image1.html">Name: My image 1 
' ]

使用

//span[@class="title"]/node()

这将选择所有节点(元素、文本节点、处理指令和注释),这些节点是XML文档中任何span元素的子节点,其class属性的值为"title"

如果只想获取文档中第一个此类span的子节点,请使用

(//span[@class="title"])[1]/node()

相关问题 更多 >