如何用美丽的汤提取文本的“alt”

时间:2017-04-24 03:42:18

标签: python beautifulsoup alt

我刚刚发现了美丽的汤,它看起来非常强大。我想知道是否有一种简单的方法来提取文本的“alt”字段。 一个简单的例子是

from bs4 import BeautifulSoup

html_doc ="""
<body>
<p>Among the different sections of the orchestra you will find:</p>
<p>A <img src="07fg03-violin.jpg" alt="violin" /> in the strings</p>
<p>A <img src="07fg03-trumpet.jpg" alt="trumpet"  /> in the brass</p>
<p>A <img src="07fg03-woodwinds.jpg" alt="clarinet and saxophone"/> in the woodwinds</p>
</body>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.get_text())

这会导致

在管弦乐队的不同部分你会发现:

字符串中的A

黄铜中的A

木管乐器中的A

但我希望在文本提取中包含alt字段,这将提供

在管弦乐队的不同部分你会发现:

琴弦中的小提琴

黄铜中的小号

木管乐器中的单簧管和萨克斯管

由于

2 个答案:

答案 0 :(得分:2)

请考虑这种方法。

from bs4 import BeautifulSoup

html_doc ="""
<body>
<p>Among the different sections of the orchestra you will find:</p>
<p>A <img src="07fg03-violin.jpg" alt="violin" /> in the strings</p>
<p>A <img src="07fg03-trumpet.jpg" alt="trumpet"  /> in the brass</p>
<p>A <img src="07fg03-woodwinds.jpg" alt="clarinet and saxophone"/> in the woodwinds</p>
</body>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
ptag = soup.find_all('p')   # get all tags of type <p>

for tag in ptag:
    instrument = tag.find('img')    # search for <img>
    if instrument:  # if we found an <img> tag...
        # ...create a new string with the content of 'alt' in the middle if 'tag.text'
        temp = tag.text[:2] + instrument['alt'] + tag.text[2:]
        print(temp) # print
    else:   # if we haven't found an <img> tag we just print 'tag.text'
        print(tag.text)

输出

Among the different sections of the orchestra you will find:
A violin in the strings
A trumpet in the brass
A clarinet and saxophone in the woodwinds

策略是:

  1. 查找所有<p>代码
  2. 在这些<img>代码
  3. 中搜索<p>代码
  4. 如果我们找到并<img>标记将其alt属性的内容插入tag.text并将其打印出来
  5. 如果我们找不到<img>标签,请打印

答案 1 :(得分:0)

a = soup.findAll('img')

for every in a:
    print(every['alt'])

这将完成这项工作。

1.line找到所有IMG(我们使用.find 全部

或文字

print (a.text)
for eachline in a:
    print(eachline.text)

简单的for循环遍历每个结果或手动soup.findAll('img')[0]然后 soup.findAll('img')[1] ..等等