使用Python lxml/beautiful soup查找网页上的所有链接

10 投票
4 回答
15797 浏览
提问于 2025-04-16 18:21

我正在写一个脚本,用来读取网页,并建立一个符合特定条件的链接数据库。现在我遇到了问题,主要是在使用lxml这个库时,不太明白怎么从HTML中提取所有的<a href>链接...

result = self._openurl(self.mainurl)
content = result.read()
html = lxml.html.fromstring(content)
print lxml.html.find_rel_links(html,'href')

4 个回答

2

我想提供一个基于lxml的替代方案。

这个方案使用了lxml.cssselect中提供的一个函数。

    import urllib
    import lxml.html
    from lxml.cssselect import CSSSelector
    connection = urllib.urlopen('http://www.yourTargetURL/')
    dom =  lxml.html.fromstring(connection.read())
    selAnchor = CSSSelector('a')
    foundElements = selAnchor(dom)
    print [e.get('href') for e in foundElements]
5

使用 iterlinks,lxml 提供了一个非常棒的功能来完成这个任务。

这个功能会为每一个链接返回四个信息:元素、属性、链接和位置。这些链接可能出现在 action、archive、background、cite、classid、codebase、data、href、longdesc、profile、src、usemap、dynsrc 或 lowsrc 这些属性中。

15

使用XPath。可以试试类似这样的东西(我这边无法测试):

urls = html.xpath('//a/@href')

撰写回答