【数据清洗与预处理】-文本采集与处理
1.从pdf中提取文本信息
下面是一个Python案例,展示如何将PDF文件中的信息转换为可读取的数据。这个示例使用了PyPDF2库来读取PDF文件内容。
案例:从PDF文件提取文本
环境准备
首先,确保你已经安装了PyPDF2库。可以使用以下命令进行安装:
pip install PyPDF2
示例代码
import PyPDF2def extract_text_from_pdf(pdf_file_path):# 打开PDF文件with open(pdf_file_path, 'rb') as file:# 创建PDF阅读器对象pdf_reader = PyPDF2.PdfReader(file)# 提取每一页的文本text = ""for page in pdf_reader.pages:text += page.extract_text() + "\n" # 将每页文本连接return textif __name__ == "__main__":pdf_path = 'example.pdf' # 替换为你的PDF文件路径extracted_text = extract_text_from_pdf(pdf_path)# 打印提取的文本print("提取的文本内容:")print(extracted_text)
代码说明
1.导入库:导入PyPDF2库以处理PDF文件。
2.函数定义:定义extract_text_from_pdf函数,接收PDF文件路径作为参数。
3.打开文件:使用with open()打开PDF文件。
4.创建PDF阅读器:使用PdfReader创建一个PDF阅读器对象。
5.提取文本:遍历每一页,使用extract_text()方法提取文本,并将其连接。
6.返回结果:函数返回提取的文本。
7.主程序:在主程序中调用该函数并打印提取的文本。
使用方法
将上面的代码保存到一个Python文件中,确保将pdf_path变量中的路径替换为你要处理的PDF文件路径。运行该程序后,它将提取并打印PDF文件中的文本内容。
2.将pdf中的文字和图片分开获取
如果PDF文件包含空白和图片,解析内容的难度会增加。在这种情况下,可以使用pdfplumber库,这个库可以更好地处理复杂的PDF结构,并提取文本、表格等内容。
案例:使用pdfplumber提取PDF内容
环境准备
首先,确保你已经安装了pdfplumber库。可以使用以下命令进行安装:
pip install pdfplumber
示例代码
import pdfplumberdef extract_text_and_images_from_pdf(pdf_file_path):text = ""images = []# 打开PDF文件with pdfplumber.open(pdf_file_path) as pdf:for page in pdf.pages:# 提取文本text += page.extract_text() or "" # 避免空文本的连接# 提取图片for img in page.images:img_data = page.within_bbox(img['doctop'], img['doctop'] + img['height'], img['x0'], img['x1'])images.append(img_data)return text, imagesif __name__ == "__main__":pdf_path = 'example.pdf' # 替换为你的PDF文件路径extracted_text, extracted_images = extract_text_and_images_from_pdf(pdf_path)# 打印提取的文本内容print("提取的文本内容:")print(extracted_text)# 打印提取的图片数量print(f"提取的图片数量:{len(extracted_images)}")
代码说明
1.导入库:导入pdfplumber库。
2.函数定义:定义extract_text_and_images_from_pdf函数,接收PDF文件路径作为参数。
3.打开文件:使用pdfplumber.open()打开PDF文件。
4.提取文本:使用extract_text()方法提取文本。
5.提取图片:使用page.images获取每页的图片信息,并将其存储在images列表中。
6.返回结果:函数返回提取的文本和图片。
7.主程序:在主程序中调用该函数并打印提取的文本和图片数量。
使用方法
将上面的代码保存到一个Python文件中,确保将pdf_path变量中的路径替换为你要处理的PDF文件路径。运行该程序后,它将提取并打印PDF文件中的文本内容和图片数量。
注意事项
- 如果PDF中的文本提取不完整,可能需要调整extract_text()方法的参数,或者使用OCR技术(如pytesseract)来处理扫
- 在这行代码中:
img_data = page.within_bbox(img[‘doctop’], img[‘doctop’] + img[‘height’], img[‘x0’], img[‘x1’])
我们使用了pdfplumber库的within_bbox方法,该方法可以根据给定的边界框(bounding box)来裁剪页面的内容。具体来说:- img[‘doctop’]:表示图片在页面上的上边界(y坐标)。
- img[‘doctop’] + img[‘height’]:表示图片在页面上的下边界(y坐标),通过在上边界上加上图片的高度来计算。
- img[‘x0’]:表示图片在页面上的左边界(x坐标)。
- img[‘x1’]:表示图片在页面上的右边界(x坐标)。
这四个参数共同定义了一个矩形区域,表示该图片在页面上的位置和大小。within_bbox方法会返回该区域内的内容(文本或其他元素)。
详细解释- 边界框(Bounding Box):一个矩形区域,通常由左上角和右下角的坐标定义。在PDF处理和图像处理时,边界框用于确定感兴趣区域。
- img[‘doctop’] 和 img[‘height’]:这两个值组合在一起定义了图片的上下边界。
- img[‘x0’] 和 img[‘x1’]:这两个值定义了图片的左右边界。
这个方法的主要目的是获取该图片对应的页面部分的内容,便于进一步处理或保存。如果只想提取图片,可以直接使用img对象的相关属性进行处理,而不需要调用within_bbox。描的PDF。- 提取的图片将是图片信息,若需要进一步处理图片内容,可以考虑使用PIL或OpenCV等库。
3.将pdf转换成html文件
在Windows环境下,将PDF转换为HTML可以按照以下步骤操作:
步骤1:安装pdf2htmlEX
1.下载
pdf2htmlEX:
- 访问pdf2htmlEX的GitHub页面
- 找到最新版本,下载适合Windows的安装包(通常为.zip文件)。
2.解压缩文件
- 将下载的.zip文件解压缩到你选择的文件夹(例如C:\pdf2htmlEX)。
3.配置环境变量
- 找到解压后的pdf2htmlEX.exe文件所在的目录。
- 右键“此电脑”或“计算机”,选择“属性”。
- 点击“高级系统设置”,然后选择“环境变量”。
- 在“系统变量”中,找到Path变量,选择并点击“编辑”。
- 在新打开的窗口中,点击“新建”,添加pdf2htmlEX.exe所在的目录(如C:\pdf2htmlEX)。
- 确认所有窗口以保存更改。
步骤2:准备Python脚本
1.确保安装Python
- 如果尚未安装Python,可以从Python官网
2.安装所需的Python库
- 在命令提示符中运行以下命令,确保你有os模块(Python自带):
pip install pdf2htmlEX
3.创建转换脚本
- 打开文本编辑器(如Notepad)并复制以下代码:
import osdef convert_pdf_to_html(pdf_file_path, output_html_path):# 构建命令行指令command = f"pdf2htmlEX --dest-dir={os.path.dirname(output_html_path)} {pdf_file_path} {output_html_path}"# 执行命令os.system(command)if __name__ == "__main__":pdf_path = 'C:\\path\\to\\your\\example.pdf' # 替换为你的PDF文件路径output_html = 'C:\\path\\to\\your\\output.html' # 输出的HTML文件路径convert_pdf_to_html(pdf_path, output_html)print(f"PDF文件已成功转换为HTML:{output_html}")
- 保存为convert_pdf.py,并将pdf_path和output_html替换为实际路径。
步骤3:运行Python脚本
1.打开命令提示符
- 按Win + R,输入cmd,然后按Enter。
2.导航到脚本所在目录
- 使用cd命令导航到存储convert_pdf.py的文件夹。例如:
cd C:\path\to\your\script
3.运行脚本
python convert_pdf.py
步骤4:检查输出
- 脚本运行后,输出的HTML文件将保存在你指定的路径中。可以用浏览器打开查看转换效果。
4.解析html文件
下面是一个简单的Python案例,展示如何解析HTML文件内容。我们将使用BeautifulSoup库,这是一种常用的HTML和XML解析库,适合从网页中提取数据。
案例:解析HTML文件内容
环境准备
首先,确保你已经安装了BeautifulSoup和requests库。可以使用以下命令进行安装:
pip install beautifulsoup4 requests
示例代码
下面的示例代码将读取一个HTML文件,解析其中的内容,并提取特定的元素。
from bs4 import BeautifulSoupdef parse_html_file(html_file_path):# 打开并读取HTML文件with open(html_file_path, 'r', encoding='utf-8') as file:content = file.read()# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(content, 'html.parser')# 提取标题title = soup.title.stringprint(f"页面标题: {title}")# 提取所有段落paragraphs = soup.find_all('p') # 查找所有<p>标签for i, p in enumerate(paragraphs, start=1):print(f"段落 {i}: {p.get_text()}") # 获取每个段落的文本内容if __name__ == "__main__":html_path = 'example.html' # 替换为你的HTML文件路径parse_html_file(html_path)
代码说明
1.导入库
from bs4 import BeautifulSoup
- 导入BeautifulSoup库以解析HTML文件。
2.函数定义
def parse_html_file(html_file_path):
- 定义parse_html_file函数,接收HTML文件路径作为参数。
3.打开并读取HTML文件
with open(html_file_path, 'r', encoding='utf-8') as file:content = file.read()
- 使用with open()打开HTML文件,并读取其内容。
4.解析HTML内容
soup = BeautifulSoup(content, 'html.parser')
- 使用BeautifulSoup解析读取的HTML内容。
5.提取标题
title = soup.title.string
print(f"页面标题: {title}")
- 使用soup.title获取页面的标题,并打印。
6.提取所有段落
paragraphs = soup.find_all('p') # 查找所有<p>标签
for i, p in enumerate(paragraphs, start=1):print(f"段落 {i}: {p.get_text()}")
- 使用find_all(‘p’)方法查找所有段落(
标签),并逐一打印每个段落的文本内容。
7.主程序
if __name__ == "__main__":html_path = 'example.html' # 替换为你的HTML文件路径parse_html_file(html_path)
- 在主程序中调用解析函数。
使用方法
1.将上面的代码保存为Python文件(如
parse_html.py)。
2.将要解析的HTML文件放在与代码相同的目录中,或在
html_path中指定正确的路径。
3.运行该程序:
python parse_html.py
运行后,程序将打印出HTML文件的标题和所有段落的内容。你可以根据需求修改代码,以提取其他元素或属性。
5.网页爬虫
下面是一个使用Python编写的简单网页爬虫示例,使用requests库获取网页内容,并使用BeautifulSoup解析HTML。这个爬虫会抓取网页的标题和所有段落内容。
示例代码:基本网页爬虫
环境准备
确保你已经安装了requests和BeautifulSoup库。如果没有,可以使用以下命令进行安装:
pip install requests beautifulsoup4
爬虫代码
import requests
from bs4 import BeautifulSoupdef crawl_webpage(url):try:# 发送GET请求response = requests.get(url)response.raise_for_status() # 检查请求是否成功# 解析HTML内容soup = BeautifulSoup(response.text, 'html.parser')# 提取页面标题title = soup.title.string if soup.title else '无标题'print(f"页面标题: {title}")# 提取所有段落paragraphs = soup.find_all('p') # 查找所有<p>标签for i, p in enumerate(paragraphs, start=1):print(f"段落 {i}: {p.get_text()}") # 获取每个段落的文本内容except requests.exceptions.RequestException as e:print(f"请求发生错误: {e}")if __name__ == "__main__":url = 'https://example.com' # 替换为你要爬取的网址crawl_webpage(url)
代码说明
1.导入库
import requests
from bs4 import BeautifulSoup
- 导入requests库用于发送HTTP请求,导入BeautifulSoup用于解析HTML。
2.定义爬虫函数
def crawl_webpage(url):
- 定义crawl_webpage函数,接收一个URL作为参数。
3.发送请求
response = requests.get(url)
response.raise_for_status() # 检查请求是否成功
- 使用requests.get()发送GET请求。如果请求失败,将抛出异常。
4.解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
- 使用BeautifulSoup解析获取的网页内容。
5.提取标题
title = soup.title.string if soup.title else '无标题'
print(f"页面标题: {title}")
- 获取页面的标题,若无标题则返回"无标题"。
6.提取段落内容
paragraphs = soup.find_all('p')
for i, p in enumerate(paragraphs, start=1):print(f"段落 {i}: {p.get_text()}")
- 查找所有段落(
标签),并逐一打印其文本内容。
7.异常处理
except requests.exceptions.RequestException as e:print(f"请求发生错误: {e}")
- 捕获请求异常并打印错误信息。
8.主程序
if __name__ == "__main__":url = 'https://example.com' # 替换为你要爬取的网址crawl_webpage(url)
- 在主程序中调用爬虫函数,指定要爬取的网页地址。
使用方法
1.将上面的代码保存为Python文件(如
web_crawler.py)。
2.替换
url变量中的网址为你想爬取的网页地址。
3.运行该程序:
python web_crawler.py
程序将打印出网页的标题和所有段落的内容。你可以根据需求修改代码以提取其他元素或数据。