首页 > 解决方案 > python scrapy css选择器不是常量格式抓取

问题描述

我正在学习 Python scrapy,但在收集有关非恒定 html 格式的信息时遇到了麻烦。

例如,在我试图抓取的网站上,有些格式如下:

<div class="one">
  <div class="two">
    <p>hello</p>
  </div>
</div>

虽然有些可能采用以下格式:

<div class="one">
  <div class="two">
    hello
  </div>
</div>

有些包裹在“p”标签周围,但有些不是。我如何抓取文本是否包含在“p”标签中?有条件检查器吗?

谢谢你!

标签: pythonscrapy

解决方案


你可以用这个。结果是您可以在此之后处理的列表。使用 /text - 它将仅在当前元素中搜索文本。使用 //text - 也在子节点(节点)上

html1 = """
<div class="one">
  <div class="two">
    <p>hello</p>
  </div>
</div>
"""
sel = scrapy.Selector( text = html1 )
print(sel.xpath('//div[@class="two"]//text()').extract())


html2 = """
<div class="one">
  <div class="two">
    hello
  </div>
</div>
"""
sel = scrapy.Selector( text = html2 )
print(sel.xpath('//div[@class="two"]//text()').extract())

输出:

['\n    ', 'hello', '\n  ']
['\n    hello\n  ']

推荐阅读