我目前在从 HTML 片段中检索姓名“Terence Crawford”时遇到困难。挑战在于排除存在于同一父元素中的 span 元素。
<td colspan="3" style="position:relative;" class="defaultTitleAlign">
<h1 style="display:inline-block;margin-right:5px;line-height:30px;">
<span style="font-weight:bold;"><i class="fas fa-crown" style="color:#f6b501 !important;"></i></span>
"Terence Crawford"
</h1>
<div style="width:100%;position:relative;margin-top:5px;">
</div>
</td>
我尝试通过指定类属性“defaultTitleAlign”和样式属性“display:inline-block;margin-right:5px;line-height:30px;”来检索名称,但它只返回“/n”的真实姓名。即使定位 h1 元素的全部内容,也不会显示名称。
In [9]: response.xpath("//td[@class='defaultTitleAlign']/h1/text()").get()
Out[9]: '\n '
您可以使用
getall()
方法从给定的选择器中收集所有 text()
,然后您可以在返回的列表中找到您要查找的部分。
例如:
In [1]: from scrapy.selector import Selector
In [2]: html = """<td colspan="3" style="position:relative;" class="defaultTitleAlign">
...: <h1 style="display:inline-block;margin-right:5px;line-height:30px;">
...: <span style="font-weight:bold;"><i class="fas fa-crown" style="color:#f6b501 !important;"></i></span>
...: "Terence Crawford"
...: </h1>
...: <div style="width:100%;position:relative;margin-top:5px;">
...: </div>
...: </td>"""
In [4]: response = Selector(text=html)
In [5]: text_list = response.xpath("//td[@class='defaultTitleAlign']/h1//text()").getall()
In [6]: text = text_list[1].strip()
In [7]: text
Out[7]: '"Terence Crawford"'