python - 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”标签中?有条件检查器吗?
谢谢你!
解决方案
你可以用这个。结果是您可以在此之后处理的列表。使用 /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 ']
推荐阅读
- google-bigquery - BigQuery:将数据导出到分层文件夹:YYYY/MM/DD
- javascript - 在 Ant Design 中强制列需要排序
- python - teradatasql:运行时/cgo:无法获得 pthread_keys
- c - 使用字符串时遇到问题
- .net - 如何覆盖自定义样式属性以更改 WPF 中选定选项卡的标题图像源?
- bash - 如何在 bash 中定义包含变量的变量名?
- snowflake-cloud-data-platform - 如何卸载 CSV 文件,其中只有非空值用引号括起来,引号可选地包含在内,并且空值不被引用?
- flutter - Flutter/Dart:如何从 Flutter 中的字符串中提取电子邮件和电话号码
- r - 保持连续重复
- excel - 使用 TableData officejs 将 API 数据绑定到 Excel