关于从HTML文档中提取链接的问题,我找不到很好的答案。我看到了一些答案,您可以在其中直接指定链接。但是,如果要提取未指定的网址怎么办?我只是想知道这是否可能。我在这里有这个HTML
我把它放到皮查姆
html = """
<
<html>
<head>
<title>About me</title>
</head>
<body>
<h1>About Me</h1>
<h4>My Hobbies</h4>
<a href="http://www.google.com"> hello world </a>
<a href="http://www.nytimes.com">byeworld </a>
<ul>
<li>Cooking</li>
<li>Gym</li>
<li>Code</li>
</ul>
</body>
</html> """
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
print(soup.get_text())
#<html>
#<head>
# <title>About me</title>
#</head>
#<body>
#<h1>About Me</h1>
#<h4>My Hobbies</h4>
# <a href="http://www.google.com"> hello world </a>
# <a href="http://www.nytimes.com">byeworld </a>
#<ul>
# <li>Cooking</li>
# <li>Gym</li>
# <li>Code</li>
#</ul>
#</body>
#</html>
我得到的输出是:
About me
About Me
My Hobbies
Cooking
Gym
Code
这是我想要的基本知识,但我希望它也以纯文本形式提取两个URL。
我尝试使用
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
for link in soup.find_all('a', href=True):
print(link['href'])
print(soup.get_text())
和
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
soup.find_all("a")
for link in soup.final_all('a'):
print(link.get('href'))
print(soup.get_text())
我对如何执行此操作感到非常困惑。如果有人可以帮助您?
答案 0 :(得分:0)
只要您在for循环后缩进代码,第一个代码块就应该起作用。在python中,缩进是您指定代码块的方式,因此每次缩进比for循环缩进一个制表符的内容都会在每次循环迭代时运行。
geom_segment(aes(x = quantile, y = next_quantile)) +
应打印:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
for link in soup.find_all('a', href=True):
print(link['href'])
print(soup.get_text())
请注意,您的html中也有一个额外的http://www.google.com
http://www.nytimes.com
<
About me
About Me
My Hobbies
hello world
byeworld
Cooking
Gym
Code
。
答案 1 :(得分:0)
您的代码几乎可以。要选择具有<a>
属性的所有href
标签,可以使用CSS选择器soup.select('a[href]')
。然后只需迭代找到的元素并在其中打印URL和文本:
html = """<html>
<head>
<title>About me</title>
</head>
<body>
<h1>About Me</h1>
<h4>My Hobbies</h4>
<a href="http://www.google.com"> hello world </a>
<a href="http://www.nytimes.com">byeworld </a>
<ul>
<li>Cooking</li>
<li>Gym</li>
<li>Code</li>
</ul>
</body>
</html> """
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print([(a['href'], a.text.strip()) for a in soup.select('a[href]')])
打印:
[('http://www.google.com', 'hello world'), ('http://www.nytimes.com', 'byeworld')]