通过Pandas模块也可以实现简单的爬虫。主要使用Pandas的read_html方法,该方法用于导入带有table标签的网页表格数据,语法如下:
pandas.read_html(io,match='.+',flavor=None,header=None,index_col=None,skiprows=None,attrs=None,parse_dates=False,thousands=',',encoding=None,decimal='.',converters=None,na_values=None,keep_default_na=True,displayed_only=True)
主要参数说明:
- io:字符串,文件路径,也可以是URL链接。网址不接受https,可以尝试去掉https中的s后爬取,如http://www.mingribook.com。
- match:正则表达式,返回与正则表达式匹配的表格。
- flavor:解析器默认为“lxml”。
- header:指定列标题所在的行,列表list为多重索引。
- index_col:指定行标题对应的列,列表list为多重索引。
- encoding:字符串,默认为None,文件的编码格式。
- 返回值:返回一个DataFrame。
使用read_html方法前,首先要确定网页表格是否为table类型。例如,NBA球员薪资网页(http://www.espn.com/nba/salaries),右键单击该网页中的表格,在弹出的菜单中选择“检查元素”,查看代码中是否含有表格标签<table>…</table>的字样,如图所示,确定后才可以使用read_html方法。
![0b752e7bcbd8b165f23f4795fa1f603f.png](https://i-blog.csdnimg.cn/blog_migrate/0df12b60a5ad9a5b075356a6c20cbc44.png)
下面使用read_html()方法导入NBA球员薪资数据,程序代码如下:
import pandas as pd
df = pd.DataFrame()
url_list = ['http://www.espn.com/nba/salaries/_/seasontype/4']
for i in range(2, 13):
url = 'http://www.espn.com/nba/salaries/_/page/%s/seasontype/4' % i
url_list.append(url)
#遍历网页中的table读取网页表格数据
for url in url_list:
df = df.append(pd.read_html(url), ignore_index=True)
#列表解析:遍历dataframe第3列,以子字符串$开头
df = df[[x.startswith('$') for x in df[3]]]
print(df)
df.to_csv('NBA.csv',header=['RK','NAME','TEAM','SALARY'], index=False)
运行程序,输出结果如图所示。
![b39ee10766603e6bfa5aee6244921565.png](https://i-blog.csdnimg.cn/blog_migrate/377018397fbd42bf089da7eec37c7ffe.png)
注意:运行程序,如果出现ImportError: lxml not found, please install it错误提示信息,则需要安装lxml模块。
人人都应掌握的数据分析技能你究竟了解多少?更多数据处理、数据分析内容可参阅《Python数据分析从入门到实践》全彩版
《Python数据分析从入门到实践(全彩版)》(明日科技(MingRi Soft))【摘要 书评 试读】- 京东图书item.jd.com![d18a6eb3c1a910b0c01297f3536fe311.png](https://i-blog.csdnimg.cn/blog_migrate/81afd894b64100f491852861558e763b.png)