基本上我有类似的HTML:
<div>
<p>
<b>1</b> Communication
</p>
<p>
<b>2</b> Errors
</p>
...
</div>
我尝试(使用Scrapy)是这样的:
response.xpath("//div//p//text()")
然而,这会返回一个列表,例如
[
"1",
"Communication",
"2",
"Errors"
]
我希望有类似的东西:
[
"1 Communication",
"2 Errors"
]
这里的任何帮助将不胜感激。我试图想办法忽略b标签,但我找不到任何实际工作的东西。我不能仅仅加入列表索引的原因是因为不是每个需要解析的html都是这样的。我想使用可以忽略b标签的东西,如果它们存在,而在任何情况下只是在p中获取文本。谢谢!
答案 0 :(得分:1)
如果您的常规模式是忽略<b>
标记,则可以使用w3lib删除这些标记并从结果中构建新的响应。类似的东西:
import w3lib
import scrapy
new_body = w3lib.html.remove_tags(response.body, which_ones=('b'))
new_response = scrapy.http.HtmlResponse(url=response.url, body=new_body)
new_response
现在包含原始回复,但删除了<b>
个标记。然后,您可以使用提取逻辑而无需考虑它们。