微信大众号:「Python读财」
如有问题或主张,请大众号留言
谈及Pandas
的read.xxx
系列的函数,我们的第一反应会想到比较常用的pd.read_csv()
和pd.read_e# ^ ,xcel()
,大多数人估量没用过pd.reade % | !_html()
这个函数。尽管它低调,但功G s f # J 5 C K .用十分强k ; _ } } ; ] 6 |壮,用于抓取Table表格型数据时,简直是个神器。下面来详细介绍一下。
我们逛网页时,经常会看到这样一些数据表格,比如
电影票房$ s b数据
国际大学排行榜数据
财经数据
假如查看一下网页的HTML结构(Chrome浏览器F12),会发( – @ = c 4 P q R现它们有个共同的特点,不仅是表格,还是以Table结构展现的表格数据,大致的网页结构如下
&W N p , olt;table class="w V s K ,..." id="...">
<thead>
<tr>
<th>...</th>
</tr>
</thead>
<tbody>
<tr>
&l[ i : N | Tt;td>...</td>
</tr>
<tr>...<q 8 w y d k;/tr>
<tt ( ] b N ? Nr>...</trQ @ x 6 1 6 `>
...
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
针对网页结构相似的表格类型数据,pd.read_html()
就派上了大用场了,它可以将网页上的表格都抓取下来,并以DataFrame
的方式装在一个列表中返回。具体是这么个流程:o v Q l H r J ,
先介绍一下ri l e / r (eadA ) R_html
的一些首要的参数
read_html
-
io
:s_ z A t | T ; a tr or file-like接纳网址、文件、字符串。网址不接受
https
,测验去掉s
后爬去 -
hea- f ) P Z rder
:iq ~ E 0nt or list-lik5 , i % Je or Np ; 6 x h 1 r :one指定列! u t 7 n d X标题地点的行
-
attrs
: dict or None, optional传递一个字典,用其间的特点筛选出特定的表v # u . d格
-
parse_dates
:bool解析日期
接下w : a来以爬取新浪财经的基V ( k 0 .金 ( # K $ u重仓股为例演示一下,URL为:http://vip.sr P * O wtock.fina7 P H V u E M xnce.sina.com.cn/q/go.php/vComStockHold/kind/jjzc/index.g Z a & 3 ; o xphtml?p=1
这部分有6页,点击不同的页数可以发现,请求URL首要是p
参t S k数在变化,p=n
代表T e | 0 h了第n
页,所以一个for
循环就可以遍历所有网址啦。URL的变化规则了解之后,就可H ] K O a j t T A以愉快的爬数据了,上代码
import pandas as pd
df = pd.DataFrame()
for i in range(6):
url = 'http://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jjzc/index.phtml?p={page}'.format(H ^ , T 4 Y ~ upage=i+1)
df = pd.concat([df,pd.read_html(ure * t . G 3 kl)[0]])
print("第{page}页完结~".format(page=i+1))
df.to_csv('./data.csv', ee 2 , tncoding='utf-8', index=0)
整个进程不需要用到正则表达式或者xpath
等工具,短短的几行代码就可以将数据嗖嗖地爬下来了,是不是超级无敌便利?赶忙着手操作一波吧!
日后在爬一些小型数据时,只需遇到这种Table类型的表格,就可以直接祭出read_html
这个神器啦,他人还在揣摩正则、xpath
怎样写的时分,你现已把数据爬完了,想想就很舒服!
扫码关注大众号 「Python读财」,第一时间获取干货!