微信大众号:「Python读财」

如有问题或主张,请大众号留言

谈及Pandasread.xxx系列的函数,我们的第一反应会想到比较常用的pd.read_csv()pd.read_e# ^ ,xcel(),大多数人估量没用过pd.reade % | !_html()这个函数。尽管它低调,但功G s f # J 5 C K .用十分强k ; _ } } ; ] 6 |壮,用于抓取Table表格型数据时,简直是个神器。下面来详细介绍一下。

我们逛网页时,经常会看到这样一些数据表格,比如

电影票房$ s b数据

天秀!Pandas还能用来写爬虫?

国际大学排行榜数据

天秀!Pandas还能用来写爬虫?

财经数据

天秀!Pandas还能用来写爬虫?

假如查看一下网页的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 ,

天秀!Pandas还能用来写爬虫?

先介绍一下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首要是pt 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)
天秀!Pandas还能用来写爬虫?

整个进程不需要用到正则表达式或者xpath等工具,短短的几行代码就可以将数据嗖嗖地爬下来了,是不是超级无敌便利?赶忙着手操作一波吧!

日后在爬一些小型数据时,只需遇到这种Table类型的表格,就可以直接祭出read_html这个神器啦,他人还在揣摩正则、xpath怎样写的时分,你现已把数据爬完了,想想就很舒服!

扫码关注大众号 「Python读财」,第一时间获取干货!

天秀!Pandas还能用来写爬虫?