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

标签 python

编写一个函数,打开网页并返回该页面上所有链接及其文本的字典。链接由 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/

相关文章:

python - PySide + QTableView 示例

c# - 如何使用 c# 或 python 发送所有 gmail 草稿

python - Python中的扩展方法

python - 在 Windows 下删除或禁用可调整大小的 Tkinter 窗口最大化按钮

python - 梯度下降实现python——轮廓线

Python:当第一列不总是相等时,抓取表/获取特定列

python - 如何从 python 脚本执行 cd 命令并在新终端中执行其他命令?

python - 如何在 Python 中导入 tensorflow lite 解释器?

python - 从 Python 运行 bash 脚本但出现 Windows 错误 193

python - 难道cProfile背叛了我?