python-Scrapy xpath获取以<开头的元素的文本
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Scrapy xpath获取以<开头的元素的文本,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1640字,纯文字阅读大概需要3分钟。
内容图文
![python-Scrapy xpath获取以<开头的元素的文本](/upload/InfoBanner/zyjiaocheng/665/fe66c9e66ecb497e9168e5b2b3370b17.jpg)
我正在尝试从此html代码段中获取文本“< 1小时”.
<div class="details_wrapper">
<div class="detail">
<b>Recommended length of visit:</b>
<1 hour
</div>
<div class="detail">
<b>Fee:</b>
No
</div>
</div>
这是我正在使用的xpath表达式:
visit_length = response.xpath(
"//div[@class='details_wrapper']/"
"div[@class='detail']/b[contains(text(), "
"'Recommended length of visit:')]/parent::div/text()"
).extract()
但是它无法获取文本.我认为这是由于“<”引起的在我需要的文本中,它被视为html标签.我该如何刮擦文本“< 1小时”?
解决方法:
考虑到Scrapy在后台使用了lxml,可能值得检查一下lxml如何处理这种HTML,其中包含XML特殊字符<.在文本节点之一中:
>>> from lxml import html
>>> raw = '''<div class="details_wrapper">
... <div class="detail">
... <b>Recommended length of visit:</b>
... <1 hour
... </div>
... <div class="detail">
... <b>Fee:</b>
... No
... </div>
... </div>'''
...
>>> root = html.fromstring(raw)
>>> print html.tostring(root)
<div class="details_wrapper">
<div class="detail">
<b>Recommended length of visit:</b>
<div class="detail">
<b>Fee:</b>
No
</div>
</div></div>
请注意,在上面的演示中,您怀疑文本节点“ <1小时”完全脱离了根元素源.作为一种解决方法,请考虑使用BeautifulSoup,因为在处理这种HTML情况下它更合理(您可以传递response.body_as_unicode()从Scrapy响应中创建汤):
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(raw, "html.parser")
>>> print soup.prettify()
<div class="details_wrapper">
<div class="detail">
<b>
Recommended length of visit:
</b>
<1 hour
</div>
<div class="detail">
<b>
Fee:
</b>
No
</div>
</div>
可以使用BS查找目标文本节点,如下所示:
>>> soup.find('b', text='Recommended length of visit:').next_sibling
u'\n <1 hour\n'
内容总结
以上是互联网集市为您收集整理的python-Scrapy xpath获取以<开头的元素的文本全部内容,希望文章能够帮你解决python-Scrapy xpath获取以<开头的元素的文本所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。