使用BeautifulSoup显示img alt标签中的文本

10

到目前为止,我的代码是:

year = range(1958,2013)
randomYear = random.choice(year)
randomYear = str(randomYear)
page = range(1,5)
randomPage = random.choice(page)
randomPage = str(randomPage)
print(randomPage, randomYear)
url = 'http://www.billboard.com/artists/top-100/'+randomYear+'?page='+randomPage
url1 = urlopen(url)
htmlSource = url1.read()
url1.close()
soup = BeautifulSoup(htmlSource)
listm = soup.findAll('article', {'class': 'masonry-brick','style' : 'position;  absolute; top; 0px; left: 0px;'})
for listm in soup.findAll('div',{'class': 'thumbnail'}):
    for listm in soup.find('img alt')(''):
        print(listm)
我想要做的是获取img alt=''文本。我认为我的代码写得差不多了,但是它没有显示任何东西。

请注意:此代码与您的代码不同,它包括两个端点。您可以使用字符串格式化来创建URL:url ='http://www.billboard.com/artists/top-100/{year}?page={page}'.format(year=random.randint(1958, 2013), page=random.randint(1, 5)) - jfs
2个回答

19

要获取具有 alt 属性的 <img> 元素,可以使用 soup('img', alt=True)

print("\n".join([img['alt'] for img in div.find_all('img', alt=True)]))
不要为不同的目的使用相同的名称,这会影响代码的可读性。
soup = BeautifulSoup(htmlSource)
articles = soup('article', 'masonry-brick',
                style='position;  absolute; top; 0px; left: 0px;')
for div in soup.find_all('div', 'thumbnail'):
    for img in div.find_all('img', alt=True):
        print(img['alt'])
注意:articles未使用。

我只需要一个标签。我该怎么做?

你可以使用.find()方法,获取每个<div>中的一个<img>元素:

for div in soup.find_all('div', 'thumbnail'):
    img = div.find('img', alt=True)
    print(img['alt'])

现在这样很好。但是,我只需要一个img标签。我该怎么做? - Brian Fuller
你能检查一下我是否做对了吗?它仍然显示不止一个。for img in div.find_all('img', alt=True): img = div.find('img', alt=True) print(img['alt']) - Brian Fuller
1
@BrianFuller:使用 div.find() 代替 for 循环。 - jfs
soup.findAll('div',{'class': 'thumbnail'}).img['alt'] - noobninja

1

我认为你的意思是:

soup.find('img', alt='')

这将查找具有属性值为''(即空)的alt属性的img标签。

不幸的是,我遇到了之前相同的问题。什么也没有显示。 - Brian Fuller
我可能应该补充一下,如果有人有误解的话。我想要img alt=''标签内的文字。 - Brian Fuller
@BrianFuller 可能是你第一个 findAll 函数出现了错误,因为没有名为 'article' 的标签(或类似的名称,例如可能没有 'masonry-brick' 类)。在一个页面上快速检查后,我看到很多 'masonry-brick' 但没有 'article' 标签。 - TerryA
@BrianFuller 如果你想要内部文本,那么可以使用soup.find('img').alt.text - TerryA
1
我收到了错误信息 AttributeError: 'NoneType' object has no attribute 'text' - Brian Fuller
@BrianFuller 这意味着img中没有alt。你可能需要添加一些条件:temp = soup.find('img').alt; if temp is not None: print temp.text - TerryA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接