excel抓取多页网页数据(试试有空抓取数据,用pandas包装数据存储为excel表格)
优采云 发布时间: 2022-04-10 03:00excel抓取多页网页数据(试试有空抓取数据,用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,实现起来要困难得多。