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