如何使用BeautifulSoup去除多余div标签?网页爬取技术求助
解决LyricsFreak爬取时多余div标签的问题
嘿,我懂你爬取Ed Sheeran歌词时被多余div标签烦到的感觉!看你贴的代码没写完,不过我大概能猜到你卡在提取干净歌词内容这一步了。针对LyricsFreak的页面结构,咱们可以这样调整代码来解决问题:
修正后的完整代码
import requests from bs4 import BeautifulSoup # 注意第一个URL末尾多了个斜杠,我帮你去掉了,避免请求出错 team_urls = [ 'http://www.lyricsfreak.com/e/ed+sheeran/shape+of+you_21113143.html', 'http://www.lyricsfreak.com/e/ed+sheeran/thinking+out+loud_21083784.html', 'http://www.lyricsfreak.com/e/ed+sheeran/photograph_21058341.html' ] for url in team_urls: page = requests.get(url) soup = BeautifulSoup(page.text, 'html.parser') # 定位到歌词所在的核心容器(LyricsFreak的歌词一般在.lyrictxt类的div里) lyric_container = soup.find('div', class_='lyrictxt') if lyric_container: # 提取纯文本,用换行符分隔段落,同时去除多余空格 clean_lyrics = lyric_container.get_text(separator='\n', strip=True) # 再过滤掉多余空行,让歌词格式更整洁 clean_lyrics = '\n'.join([line for line in clean_lyrics.split('\n') if line.strip()]) print(f"=== {url.split('/')[-1].replace('_', ' ').replace('.html', '')} ===") print(clean_lyrics) print('\n') else: print(f"无法找到歌词内容:{url}")
关键说明
- 精准定位容器:LyricsFreak的歌词内容都包裹在
class="lyrictxt"的div里,直接定位这个容器就能避开页面其他无关的div标签,从源头上减少冗余内容。 - 提取纯文本:用
.get_text(separator='\n', strip=True)方法可以把容器内的所有文本提取出来,同时保留歌词原本的换行结构,还能自动去除首尾的多余空格。 - 清理空行:最后用列表推导式过滤掉无意义的空行,让歌词的排版更接近页面显示的效果。
另外,你原来的第一个URL末尾多了个斜杠,这可能会导致请求返回错误页面,我已经帮你修正了,爬取时记得留意URL的正确性哦!
内容的提问来源于stack exchange,提问作者Todd Burus
相关产品推荐
相关产品推荐

