Python基于pandas爬取网页表格数据
在Python编程中,爬取网页数据是一项常见的任务,特别是对于数据分析师和数据科学家而言。`pandas`库作为处理数据的强大工具,不仅擅长数据清洗、分析,还内置了爬取网页表格数据的功能,大大简化了网页抓取的过程。本文将详细介绍如何使用`pandas`的`read_html()`函数来高效地获取网页表格数据。 我们来看一个实例,假设我们要爬取网页https://www.kuaidaili.com/free/上的免费代理IP列表,这个网站的数据以表格的形式呈现。传统的方法可能需要结合`requests`库获取网页源码,然后使用`BeautifulSoup`或`lxml`等解析库,通过正则表达式或XPath来提取表格数据,这通常需要较多的代码。而`pandas`的`read_html()`函数则能一步到位。 ```python import pandas as pd url = 'http://www.kuaidaili.com/free/' df = pd.read_html(url)[0] # [0] 表示选取第一个表格,如果有多张表格需要指定索引 ``` `read_html()`函数会返回一个包含DataFrame对象的列表,这是因为一个网页可能有多个表格。在这个例子中,我们只需要第一个表格,所以通过索引`[0]`获取。执行这段代码后,`df`将是一个DataFrame,包含了网页表格中的所有数据。 为了将爬取到的数据保存为CSV文件,我们可以使用`to_csv()`方法: ```python df.to_csv('free_ip.csv', mode='a', encoding='utf_8_sig', header=1, index=0) print('done!') ``` 这里,`mode='a'`表示追加模式,防止覆盖已有文件;`encoding='utf_8_sig'`用于解决中文编码问题,确保中文字符正常显示;`header=1`表示保留原始表头,`index=0`表示不保存索引列。 了解`read_html()`函数的基本用法后,我们来详细探讨一下它的API参数: - `io`: 可以是URL、HTML文本、本地文件路径等,用来指定数据来源。 - `match`: 正则表达式,用于匹配表格的标签名或类名,比如`match='table'`会匹配所有的表格。 - `flavor`: 解析器,可以选择`bs4`(BeautifulSoup)或`lxml`,默认会自动选择合适的解析器。 - `header`: 指定表格的标题行,可以是整数(行号)或列表(列标题)。 - `skiprows`: 跳过指定的行数。 - `attrs`: 字典形式的HTML元素属性,如`{'id': 'table_id'}`来匹配特定ID的表格。 - `parse_dates`: 是否尝试将某些列解析为日期,如果为True,`pandas`会尝试自动识别日期格式。 - `thousands`: 分隔千位的字符,默认为逗号。 - `encoding`: 文件的编码方式。 - `decimal`: 指定小数点的字符,默认为英文句点`.`。 - `converters`: 自定义转换函数字典,用于指定列的转换规则。 - `na_values`: 指定哪些值被视为缺失值。 - `keep_default_na`: 是否保留默认的缺失值标记,如`NaN`。 - `displayed_only`: 是否只获取显示在浏览器中的表格,而非所有表格。 需要注意的是,`read_html()`返回的是DataFrame组成的列表,如果网页只有一个表格,我们可以直接通过索引访问,如`df = pd.read_html(url)[0]`。如果有多个表格,可以遍历列表获取所有表格数据。 `pandas`的`read_html()`函数是一个简洁高效的工具,它极大地简化了从网页中提取表格数据的过程,对于处理网页数据提供了极大的便利。结合`pandas`强大的数据分析功能,我们可以快速地进行数据预处理和分析,为后续的工作提供强有力的支持。希望这个教程对你的学习和工作有所帮助,继续探索`pandas`的更多功能,你会发现它在数据处理领域的强大之处。