Python BeautifulSoup 等效于 lxml 的 make_links_absolute

8 投票
1 回答
5527 浏览
提问于 2025-04-16 08:40

lxml有一个非常实用的功能:make_links_absolute:

doc = lxml.html.fromstring(some_html_page)
doc.make_links_absolute(url_for_some_html_page)

这样文档中的所有链接现在都是绝对链接了。在BeautifulSoup中有没有简单的类似功能,还是说我需要通过urlparse来处理并规范化链接呢:

soup = BeautifulSoup(some_html_page)
for tag in soup.findAll('a', href=True):
    url_data = urlparse(tag['href'])
    if url_data[0] == "":
        full_url = url_for_some_html_page + test_url

1 个回答

15

在我对如何用Python简单提取网页上的URL列表?这个问题的回答中,我顺便提到了这个过程,实际上你可以很简单地写一个方法来处理网页内容,而不仅仅是提取信息。

from urllib.parse import urljoin

def make_links_absolute(soup, url):
    for tag in soup.findAll('a', href=True):
        tag['href'] = urljoin(url, tag['href'])

(Python 2中使用:from urlparse import urljoin.)

撰写回答