使用lxml获取HTML的所有链接

问题描述 投票:0回答:3

我想使用 lxml 从 html 页面中找出所有 url 及其名称。

我可以解析 url 并找到这个东西,但是有什么简单的方法可以使用 lxml 找到所有 url 链接吗?

python lxml
3个回答
8
投票
from lxml.html import parse
dom = parse('http://www.google.com/').getroot()
links = dom.cssselect('a')

2
投票
from lxml import etree, cssselect, html

with open("/you/path/index.html", "r") as f:
    fileread = f.read()

dochtml = html.fromstring(fileread)

select = cssselect.CSSSelector("a")
links = [ el.get('href') for el in select(dochtml) ]

links = iter(links)
for n, l in enumerate(links):
    print n, l

0
投票

没有
cssselect

cssselect
是一个额外的养眼依赖项,它在幕后将你的 CSS 选择器转换为类似
dom.xpath("//a[@class='mystyle']")
的东西,这样你也可以避免它,并直接编写你的 xpath 调用。

使用
lxml.html.HtmlElement.iterlinks()

在特殊情况下,当您输入的是 HTML 并且您对链接特别感兴趣时,您可以利用

lxml.html
方便地公开的 ootb 链接迭代器,并避免处理 XPath 选择器:

另请参阅:https://lxml.de/2.2/lxmlhtml.html#working-with-links

for elem, attrname, url, pos in dom.iterlinks():
    # yields (element, attribute, link, pos) for every link in the document
    print(url)
© www.soinside.com 2019 - 2024. All rights reserved.