Python XPath不是;“看见”;img元素?
以下是我的html代码:Python XPath不是;“看见”;img元素?,python,html,xpath,web-scraping,html-parsing,Python,Html,Xpath,Web Scraping,Html Parsing,以下是我的html代码: <div style="font-size: 14px;"> <img src="somelink.com">"TEXT"<br> 但它似乎没有将“文本”指定给storedText 编辑:我想添加一些html代码片段,它们不包含img元素,但包含我不想获取的文本 <div style="font-size: 14px;"> "TEXT I DONT WANT" “我不想要文本” img元素没有包含文本
<div style="font-size: 14px;">
<img src="somelink.com">"TEXT"<br>
但它似乎没有将“文本”指定给storedText
编辑:我想添加一些html代码片段,它们不包含img元素,但包含我不想获取的文本
<div style="font-size: 14px;">
"TEXT I DONT WANT"
“我不想要文本”
img
元素没有包含文本。它们是自我完善的。因此,文本实际上是上面div
的一部分。取而代之的是抓取它的文本
换言之:
storedText = tree.xpath('//div/text()')
正如@alecxe所指出的,基于精确样式对div进行限定是一种极其脆弱的模式。但是,如果您想将该条件或其他条件添加回XPath表达式中,请随意
另外,我假设您使用的XPath实现能够适应HTML的变化?有些是,有些不是。但是那里的标记片段虽然适合HTML,但不是有效的XML。如果您的解析器/XPath组合对此很酷,那么就可以开始了。否则,你将因此而面临各种各样的悲伤
根据新信息更新
lxml.html
是解析库:lxml与纯XML库使用纯XPath的方式不同。相反,它是XPath和etree(ElementTree)API的结合,这是许多Python XML/HTML解析库所共有的,附带了一些自己的基本方法
因此,您不应该直接搜索/text()
节点。您应该使用元素特有的text\u content()
方法。例如:
import lxml.html
html = """
<div style="font-size: 14px;">
<img src="somelink.com">"TEXT"<br>
"""
tree = lxml.html.document_fromstring(html)
div = tree.xpath('//div[@style="font-size: 14px;"]')[0]
storedText = div.text_content()
def gettext(elist):
if not elist or elist is None:
return None
return ''.join(e.text_content() for e in elist)
storedText = gettext(tree.xpath('//div[@style="font-size: 14px;"]'))
print storedText
使用
gettext
,无论找到的是0、1还是多个这样的节点,都会返回一个适当的值。方法是依赖团队图标(img
标记)的位置,并获得以下文本同级
使用和完成代码:
印刷品:
LDLC
fnatic
Natus Vincere
Titan
HellRaisers
ALTERNATE
myXMG
Flipsid3
依赖元素的
style
属性看起来不太可靠。你能展示更多你正在处理的HTML代码吗?(或网站链接)。谢谢。您使用的是哪个xml包?lxml、ElementTree、beautifulsoup。。。等等。试着打印div
元素,看看html解析器是如何构建文档的。它因包而异,但如果它的lxml的html解析器是lxml.html.tostring(tree.xpath('//div[@style=“font-size:14px;“]”)[0]
@alecxe此处是站点:,我只想在团队名称旁边有图片(标志)时获取团队名称。它的html正在用lxml解析
import lxml.html
import requests
url = 'http://www.hltv.org/?pageid=2'
response = requests.get(url)
tree = lxml.html.fromstring(response.content)
for item in tree.xpath('//div[@class="centerNoHeadline"]//div[@class="hotmatchbox"]//div[@class="hotmatchbox"]/div/img/following-sibling::text()'):
print item.strip()
LDLC
fnatic
Natus Vincere
Titan
HellRaisers
ALTERNATE
myXMG
Flipsid3