如何批量采集网页表格数据?
本文的视频讲解已经上传到千聊平台 凡购买199元系列课的童鞋可直接免费观看学习
Comming Soon! Python&Stata数据分析课寒假工作坊
我们最想要的数据格式就是表数据,但这表格并不是excel文件,而是存在于网页上的表数据。比如本教程实验网站
http://s.askci.com/stock/a
一般遇到这种数据,最简单的方法就是复制粘贴,但是当
-
复制粘贴格式混乱
-
粘贴工作量太多 就需要写爬虫帮我们处理这件事情。但是常见的爬虫教程没有详细教大家怎么处理这种网址,今天我就简单说下办法。
审查网页
我们可以发现
-
视图(平常肉眼所见)与html(图片下方的html)的一一对应对关系
-
html中有
标签
网页种的table表
先来简单解释一下上文出现的几种标签含义:
-
: 定义表格
: 定义表格的行 : 定义表格的表头 : 定义表格单元 看到table这样的表格数据,我们可以利用pandas模块里的read_html函数方便快捷地抓取下来。
爬虫思路
-
寻找表格网页对应的url的网址规律
-
试图对某一个表格网页url进行访问
-
定位到所想要的table部分,得到
...
字符串table_str
-
使用pd.read html(table str),得到一个df
-
循环2-4,得到的dfs(存放多个df的列表)
-
多个df合并为新的alldf(alldf为dataframe)结果保存到csv文件中, alldf.to_csv(filename)
实战
1. 网址规律
先尝试点击翻页,看看网址栏中url变化
我们很幸运的发现网址前后有变化
所以网址规律
2. 尝试对任意页面(page2)进行访问
尝试对第二页进行访问,只要 肉眼见到 和 html中的数据 对应上,就证明访问是正常的。
这里用 深圳市特力(集团)股份有限公司 来验证
这次很幸运,因为requests.get(url)访问时并没有伪装成浏览器,网站也没有封锁这个python爬虫。我们继续
3. 定位table数据
如图,F12打开开发者工具, 我们定位到
id=myTable04
的table。Run
3. table_str2dataframe
使用pd.read html(table str)将table字符串变为dataframe
Run
跟我们设想的不太一样,结果不是dataframe应该有的样子。经过谷歌和百度,解决办法如下
4. 完整代码
重复操作
-
根据url规律,对多个表格url网页进行批量访问
-
重复之前对操作,得到dfs(存放多个df的列表)
-
将dfs转化为名为alldf的dataframe,并alldf.to_csv
5. 采集结果
参数学习
常用的参数:
-
io: 实际上io这个位置不仅可以是table字符串,还可以是表格的url、表格的html文本、或者本地文件等;但建议爬在本案例中用table_str而不是url。网址不接受https,尝试去掉s后爬去
-
header:标题所在的行数;
-
skiprows:跳过的行;
-
attrs:表格属性,对指定复合attrs值的表格进行解析,比如
attrs={‘id’:‘xxx’}
解析id为xxx的table -
parse_dates:是否解析日期,默认不解析
-
encoding: 文件编码格式,常见的有 utf-8、 gbk等,默认为None
-
converters: 字典格式,指定某一列按照某一类型数据去处理。如converters={‘股票代码’: str},对股票代码这一列按照字符串(而不是数字)方式处理
近期文章
-