使用 xpath 从 link 标签中提取 hyperlink
Extracting the hyperlink from link tag using xpath
将 html 视为
<item>
<title>this is the title</title>
<link>www.linktoawebsite.com</link>
</item>
我正在使用 Lxml(python) 和 Xpath 并尝试提取标题标签和 link 标签的内容。
密码是
page=urllib.urlopen(url).read()
x=etree.HTML(page)
titles=x.xpath('//item/title/text()')
links=x.xpath('//item/link/text()')
但这返回的是一个空列表。但是,这将返回一个 link 元素。
links=x.xpath('//item/link') #returns <Element link at 0xb6b0ae0c>
谁能建议如何从 link 标签中提取网址?
通过 etree
解析内容,<link>
标签被关闭。因此 link 标签
没有文本值
演示:
>>> from lxml import etree
>>> content = """<item>
... <title>this is the title</title>
... <link>www.linktoawebsite.com</link>
... </item>"""
>>> x = etree.HTML(content)
>>> etree.tostring(x)
'<html><body><item>\n<title>this is the title</title>\n<link/>www.linktoawebsite.com\n</item></body></html>'
>>>
根据 HTML,这不是有效标签。
我认为 link
标签结构是这样的:
<head>
<link rel="stylesheet" type="text/css" href="theme.css">
</head>
您为这项工作使用了错误的解析器;你没有 HTML,你有 XML.
正确的 HTML 解析器将忽略 <link>
标记的内容,因为在 HTML 规范中该标记始终为空。
使用 etree.parse()
函数解析您的 URL 流(不需要单独的 .read()
调用):
response = urllib.urlopen(url)
tree = etree.parse(response)
titles = tree.xpath('//item/title/text()')
links = tree.xpath('//item/link/text()')
您也可以使用 etree.fromstring(page)
,但将读取留给解析器会更容易。
将 html 视为
<item>
<title>this is the title</title>
<link>www.linktoawebsite.com</link>
</item>
我正在使用 Lxml(python) 和 Xpath 并尝试提取标题标签和 link 标签的内容。 密码是
page=urllib.urlopen(url).read()
x=etree.HTML(page)
titles=x.xpath('//item/title/text()')
links=x.xpath('//item/link/text()')
但这返回的是一个空列表。但是,这将返回一个 link 元素。
links=x.xpath('//item/link') #returns <Element link at 0xb6b0ae0c>
谁能建议如何从 link 标签中提取网址?
通过 etree
解析内容,<link>
标签被关闭。因此 link 标签
演示:
>>> from lxml import etree
>>> content = """<item>
... <title>this is the title</title>
... <link>www.linktoawebsite.com</link>
... </item>"""
>>> x = etree.HTML(content)
>>> etree.tostring(x)
'<html><body><item>\n<title>this is the title</title>\n<link/>www.linktoawebsite.com\n</item></body></html>'
>>>
根据 HTML,这不是有效标签。
我认为 link
标签结构是这样的:
<head>
<link rel="stylesheet" type="text/css" href="theme.css">
</head>
您为这项工作使用了错误的解析器;你没有 HTML,你有 XML.
正确的 HTML 解析器将忽略 <link>
标记的内容,因为在 HTML 规范中该标记始终为空。
使用 etree.parse()
函数解析您的 URL 流(不需要单独的 .read()
调用):
response = urllib.urlopen(url)
tree = etree.parse(response)
titles = tree.xpath('//item/title/text()')
links = tree.xpath('//item/link/text()')
您也可以使用 etree.fromstring(page)
,但将读取留给解析器会更容易。