
本文旨在解决使用beautifulsoup进行网页抓取时常遇到的空列表问题。核心原因在于选择器未能准确匹配目标html元素。教程将详细分析常见错误,并提供一套基于css选择器的优化方案,通过精确的元素定位和迭代处理,确保数据能够被正确提取,从而有效避免空列表的出现,提升爬虫的稳定性和效率。
在进行网页数据抓取时,开发者常会遇到BeautifulSoup返回空列表的情况。这通常不是因为网站反爬机制过于严格,而是因为我们用于定位元素的HTML选择器不够精确,或者对BeautifulSoup的选择方法理解有误。本教程将深入探讨这一问题,并提供一套健壮的解决方案。
原始代码尝试通过以下方式获取标题和文章内容:
headlines = soup.find('div', class_=['news-card-title', 'news-right-box'])
articles = soup.find('div', class_=['news-card-content', 'news-right-box'])这里存在几个关键问题:
为了解决上述问题,我们需要采用更精确、更灵活的元素选择方法,并确保正确地迭代每个目标数据块。BeautifulSoup的select()和select_one()方法支持CSS选择器,这为复杂的HTML结构提供了强大的定位能力。
以下是根据上述思路优化后的代码:
import requests
from bs4 import BeautifulSoup
url = 'https://inshorts.com/en/read/technology'
news_data = []
news_category = url.split('/')[-1]
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
data = requests.get(url, headers=headers)
if data.status_code == 200:
soup = BeautifulSoup(data.content, 'html.parser')
# 使用CSS选择器定位所有新闻文章容器
# 根据目标网站结构,每个新闻文章通常由一个具有特定itemtype属性的div或其他元素包裹
# 检查HTML发现每个新闻卡片都有itemtype="http://schema.org/NewsArticle"
for article_container in soup.select('[itemtype="http://schema.org/NewsArticle"]'):
# 在每个文章容器内部,使用select_one定位标题和文章内容
# itemprop="headline" 用于标题
# itemprop="articleBody" 用于文章主体
headline_element = article_container.select_one('[itemprop="headline"]')
article_body_element = article_container.select_one('[itemprop="articleBody"]')
# 确保元素存在,并使用.get_text()提取文本内容
news_headline = headline_element.get_text(strip=True) if headline_element else "N/A"
news_article = article_body_element.get_text(strip=True) if article_body_element else "N/A"
news_data.append(
{
'news_headline': news_headline,
'news_article': news_article,
'news_category': news_category
}
)
print(news_data)解决BeautifulSoup返回空列表的问题,核心在于理解HTML结构和选择器的工作原理。通过从find()的局限性转向select()和select_one()的强大CSS选择器功能,结合对HTML属性的精确匹配,我们可以构建出更稳定、更高效的网页抓取程序。始终牢记在动手编码前进行充分的HTML结构分析,是提升爬虫成功率的关键。
以上就是解决BeautifulSoup网页抓取空列表问题:深入理解选择器与优化实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号