kui*_*ong 7 html python xpath css-selectors scrapy
假设有一些html片段,如:
<a>
text in a
<b>text in b</b>
<c>text in c</c>
</a>
<a>
<b>text in b</b>
text in a
<c>text in c</c>
</a>
Run Code Online (Sandbox Code Playgroud)
其中我想在标签中提取文本但在保留文本时排除这些标签,例如,我想要在上面提取的内容就像"c中b文本中的文本"和"b中文本中的文本" text inc".现在我可以使用scrapy Selector css()函数获取节点,那么我怎么能继续这些节点来获得我想要的呢?任何想法将不胜感激,谢谢!
这是我设法做的:
from scrapy.selector import Selector
sel = Selector(text = html_string)
for node in sel.css('a *::text'):
print node.extract()
Run Code Online (Sandbox Code Playgroud)
假设这html_string是一个在你的问题中持有html的变量,这段代码产生以下输出:
text in a
text in b
text in c
text in b
text in a
text in c
Run Code Online (Sandbox Code Playgroud)
选择器a *::text()匹配作为节点后代的所有文本a节点.
您可以在选择的元素上使用XPath的string()功能:
$ python
>>> import scrapy
>>> selector = scrapy.Selector(text="""<a>
... text in a
... <b>text in b</b>
... <c>text in c</c>
... </a>
... <a>
... <b>text in b</b>
... text in a
... <c>text in c</c>
... </a>""", type="html")
>>> for link in selector.css('a'):
... print link.xpath('string(.)').extract()
...
[u'\n text in a\n text in b\n text in c\n']
[u'\n text in b\n text in a\n text in c\n']
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6174 次 |
| 最近记录: |