gpt4 book ai didi

python - 打开网页并返回所有链接及其文本的字典的函数

转载 作者:行者123 更新时间:2023-12-01 03:55:22 29 4
gpt4 key购买 nike

编写一个函数,打开网页并返回该页面上所有链接及其文本的字典。链接由 HTML 标记定义,如下所示

链接文本

链接是 href= 后面引号中的所有内容,文本是 > 和 之间的所有内容。对于上面的示例,字典中的条目如下所示:

"{"http://my.computer.com/some/file.html": "链接文本", ...}"

这是我到目前为止已经坚持了几个小时的代码。我该如何解决这个问题?

import urllib.request


def Urls(webpage):
url = webpage
page = urllib.request.urlopen(url)
url_list = {}
for line in page:
if '<a href=' in line:

最佳答案

虽然建议使用正则表达式解决此问题的答案可能有效,但它们会失败(除非您采取措施),例如该链接分为几行。例如。这是完全有效的 HTML:

<a
href="../path">link</a>

还有一些其他边缘情况需要考虑。一般来说,HTML不能用正则表达式解析,有一些excellent prose写过关于那件事的。顺便说一句,"a href"in line 结构是一种不太强大的正则表达式形式,它仅在一行中进行搜索,并且具有相同的缺点。

相反,您应该研究将 HTML 解析为格式正确的 XML 文档的库。在 Python 中,首选库是 beautifulsoup 。有了它,您可以快速获取网页中的所有链接,例如像这样:

import urllib
from bs4 import BeautifulSoup
url = "http://www.imdb.com/"
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page, 'html.parser')
soup.find_all('a') # returns all links as a list
links = [a['href'] for a in soup.find_all('a', href=True)] # some anchors might have no href attribute, by specifying href=True, you'll get only those that do

beautifulsoup documentation文档非常齐全,有大量示例。值得一读。

关于python - 打开网页并返回所有链接及其文本的字典的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559794/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com