excel抓取多页网页数据(试试有空抓取数据,用pandas包装数据存储为excel表格)

优采云 发布时间: 2022-04-10 03:00

  excel抓取多页网页数据(试试有空抓取数据,用pandas包装数据存储为excel表格)

  看了pandas的书有一段时间了,还没有实践过。这周我有空的时候试试。我们先来看网站:

  

  一共54页,每页有50条数据。其实最简单的方法就是直接复制数据,然后粘贴到excel中。只需要粘贴54次,不算太复杂。因为编写这个程序肯定比复制和粘贴花费更多的时间。

  但是作为一个技术人员,总是很容易陷入唯一的技术理论,所以我们尝试用python抓取数据,用pandas包装数据,然后存储为excel表格。

  一、获取数据

  首先想到的是使用requests框架获取这个网页的源码,然后通过BeautifulSoup框架提取源码中的表格数据。但是实际情况是获取到的源码中没有数据,只有这个:

  

  也就是说表中的数据很可能是使用类ajax技术动态获取的,所以接下来就是找到获取数据的URL,在chrome中按F12,刷新后查看延迟为稍长一点,这很容易出现:

  

  可以看到,上面的url会返回一段js代码,data变量中收录了当前页面的数据,但是这个json数据格式不规范,在js中可能会解析,但是在js中解析不出来pandas,因为它类似于数据变量,没有引号。

  二、解析数据

  直接上代码:

  # -*- coding: UTF-8 -*-

import requests

import json

import pandas as pd

#创建一个DataFrame,用于保存到excel中

df = pd.DataFrame(columns=('编号','姓名','基金公司编号','基金公司名称','管理基金编号',

'管理基金名称','从业天数','*敏*感*词*最佳回报','*敏*感*词*最佳基金编号',

'*敏*感*词*最佳基金名称','*敏*感*词*资产总规模','任职期间最佳基金回报'))

for pageNo in range(1,55):#一共54页

url='http://fund.********.com/Data/FundDataPortfolio_Interface.aspx?dt=14&mc=returnjson&ft=all&pn=50&pi={}&sc=abbname&st=asc'.format(pageNo)

print(url)

reponse = requests.get(url)

_json = reponse.text

start = _json.find("[[")

end = _json.find("]]")

list_str = _json[start:end+2]#只取[[ ]]及以内的数据,如[["30634044","艾定飞"]]

datalist = eval(list_str)#把字符串解析成python数据列表

for i,arr in enumerate(datalist):

index = i+(pageNo-1)*50 #插入新数据时要添加索引

df.loc[index] = arr #一次插入一行数据

df.to_excel("test.xlsx")

  上面的代码虽然看起来很简单,但是探索过程比较复杂,最终达到的效果:

  

  总结:

  刚开始练习pandas的时候,遇到了很多困难。

  1.捕获数据时,专注于分析。怎么得到,怎么分析,这个思考过程远远大于写代码的过程。

  2.Pandas 和 excel 相互结合。我还阅读了一些关于 pandas 和 excel 之间哪个更好的 文章 。Excel 对大多数人来说更直观。单独来看,pandas 相比 excel 没有明显优势。但如果与 python 结合使用,则更容易利用 pandas。比如上面的例子,我用python获取数据,然后用pandas解析,然后存成excel,结合它们的优点,效果会更好。如果单独使用excel,实现起来要困难得多。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线