TypechoJoeTheme

至尊技术网

登录
用户名
密码

Python与Pandas:网页内容逐行解析与结构化导出教程,python网页结构分析

2025-11-25
/
0 评论
/
17 阅读
/
正在检测是否收录...
11/25

首先,我们需要获取网页的原始内容。这里以一个假设的本地HTML文件为例,避免涉及反爬虫等复杂问题,专注于解析逻辑本身。使用BeautifulSoup库可以轻松读取HTML并解析DOM结构。安装方式为pip install beautifulsoup4,配合内置的urllibrequests即可加载页面内容。

python
from bs4 import BeautifulSoup
import pandas as pd

with open('sample_page.html', 'r', encoding='utf-8') as file:
soup = BeautifulSoup(file, 'html.parser')

接下来是核心部分——逐行解析。所谓“逐行”,并非字面意义上的按文本行切割,而是指按照语义块逐步提取关键字段。我们先定位标题,通常位于<h1>标签内:

python title = soup.find('h1').get_text(strip=True) if soup.find('h1') else '未找到标题'

描述信息往往藏在<meta name="description">标签中,可以通过属性匹配精准捕获:

python description_tag = soup.find('meta', attrs={'name': 'description'}) description = description_tag['content'] if description_tag else '无描述'

关键词的提取方式类似,查找<meta name="keywords">

python keywords_tag = soup.find('meta', attrs={'name': 'keywords'}) keywords = keywords_tag['content'] if keywords_tag else '无关键词'

最复杂的部分是正文提取。理想情况下,正文集中在某个具有明确类名的容器中,如class="article-content"。我们需遍历该容器下的所有文本节点,合并成一段连贯内容:

python content_div = soup.find('div', class_='article-content') body_text = ' '.join(p.get_text(strip=True) for p in content_div.find_all('p')) if content_div else ''

为了避免正文过长影响后续处理,我们可以设定截断机制,保留前1000字左右:

python body_text = body_text[:1000] if len(body_text) > 1000 else body_text

至此,四个核心字段均已提取完毕。下一步是将这些信息组织成结构化格式。Pandas的DataFrame正是为此而生。我们将每一页的解析结果构造成字典,再批量汇入数据框:

python
data = [{
'标题': title,
'关键词': keywords,
'描述': description,
'正文': body_text
}]

df = pd.DataFrame(data)

若需处理多个网页,可将上述逻辑封装为函数,并循环调用:

python
def parse_page(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
soup = BeautifulSoup(f, 'html.parser')

title = soup.find('h1').get_text(strip=True) if soup.find('h1') else '未找到标题'
desc_tag = soup.find('meta', attrs={'name': 'description'})
desc = desc_tag['content'] if desc_tag else '无描述'
kw_tag = soup.find('meta', attrs={'name': 'keywords'})
kw = kw_tag['content'] if kw_tag else '无关键词'
content = soup.find('div', class_='article-content')
text = ' '.join(p.get_text(strip=True) for p in content.find_all('p')) if content else ''
text = text[:1000]

return {'标题': title, '关键词': kw, '描述': desc, '正文': text}

最后,将结果导出为CSV或Excel文件,便于进一步分析:

python results = [parse_page(f'page_{i}.html') for i in range(1, 6)] df = pd.DataFrame(results) df.to_csv('structured_content.csv', index=False, encoding='utf-8-sig')

整个流程清晰、可控,既避免了盲目使用自动化工具带来的不可控风险,又充分发挥了Python与Pandas在数据整合上的优势。更重要的是,这种手动解析的方式让我们对每一个字段的来源都有明确把握,为后续的数据质量控制打下坚实基础。

朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/39376/(转载时请注明本文出处及文章链接)

评论 (0)