如何限制Beautiful Soup仅从MarketWatch最新新闻标签提取信息?
解决MarketWatch最新新闻抓取范围问题
嘿,我帮你搞定这个问题!你的代码之所以会抓到非最新新闻区域的内容,是因为没有限定抓取的范围——直接在整个页面里搜索内容,自然会把其他区域的信息也带进来。咱们只需要先定位到最新新闻的专属容器,再在这个容器里提取标题和作者就可以了。
修改后的完整代码
from bs4 import BeautifulSoup import urllib import csv # 打开目标页面 page = urllib.urlopen('https://www.marketwatch.com/newsviewer/') soup = BeautifulSoup(page.read(), 'html.parser') # 关键步骤:定位到最新新闻的专属容器,避免抓取其他区域内容 latest_news_container = soup.find('div', class_='newsviewer__items') if latest_news_container: # 遍历容器内的所有新闻条目(每个条目对应一篇新闻) news_items = latest_news_container.find_all('div', class_='element--article') # 将提取的内容写入CSV文件 with open('latest_marketwatch_news.csv', 'w', newline='') as csvfile: fieldnames = ['新闻标题', '作者'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for item in news_items: # 提取新闻标题 title_tag = item.find('h3', class_='article__headline').find('a') title = title_tag.get_text(strip=True) if title_tag else '无标题' # 提取作者信息 author_tag = item.find('span', class_='article__author') author = author_tag.get_text(strip=True) if author_tag else '未知作者' writer.writerow({'新闻标题': title, '作者': author}) print("最新新闻已成功提取并保存到CSV文件!") else: print("未找到最新新闻容器,请检查页面结构是否有更新!")
代码说明
- 限定抓取范围:通过
soup.find('div', class_='newsviewer__items')定位到最新新闻的父容器,所有后续操作都只在这个容器内进行,彻底避免抓取其他区域的内容。 - 精准定位元素:每个新闻条目都在
class="element--article"的div里,标题和作者也有对应的专属class,确保提取的是正确内容。 - 容错处理:加入了判断标签是否存在的逻辑,就算某篇新闻没有标题或作者,代码也不会报错,而是用默认值代替。
小提醒
网站的页面结构可能会随时更新,如果以后发现代码抓不到内容了,记得打开浏览器的开发者工具(F12),重新查看最新的容器class和元素标签哦~
内容的提问来源于stack exchange,提问作者A.S
相关产品推荐
相关产品推荐

