python数据整理+突发断网解决方法(学习笔记)

这篇博客本来是接第一篇的(关于如何抓取数据下来),但由于CSDN现在不能发布关于爬虫的博客,所以我来写写抓取的数据如何整理吧。

当我们抓取文件的时候,如果网络突然断开,这样不仅会中断抓取,而且还会让我们的数据全部丢失,那么此时我们就可以使用一种方法:即每隔20条数据自动创建一个Excel文件,就能减小风险。

import pandas as pd
import urllib
import requests
from lxml import etree
import urllib.request as req
import re
import requests
from lxml import etree
from bs4 import BeautifulSoup
import urllib.request as req
import requests
import time
import numpy as np
import urllib
# import urllib2
import os

headers={'User-Agent':'.........'}
skdfs=pd.DataFrame()
for ski in range(0,30):
    skdf=pd.DataFrame()
    url='http://........com.cn/skygb/sk/index.php/index/seach/'+str(ski)
    reuqest=urllib.request.Request(url,headers=headers) 
    content=urllib.request.urlopen(reuqest).read()
    soup=BeautifulSoup(content,'lxml')
    tables=soup.findAll('table')
    tab=tables[2] # 查找发现tables[2]是我们要的数据
    skdata=pd.read_html(tab.prettify())
    skdf=pd.DataFrame(skdata[0])
    skdfs=skdfs.append(skdf)
    print('已经完成第'+str(ski)+'页')
    skdf.to_excel("skfiles/"+str(ski)+".xlsx",encoding='utf-8-sig')  # 在skfiles文件夹下面
    time.sleep(np.random.randint(5))
    
# skdfs.to_excel("skfiles.xlsx",encoding='utf-8-sig')

如图即为爬取的数据,会放到skfiles文件夹下的Excel当中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个Excel当中有20条记录,那么如果是要让100条记录在一个Excel当中呢?

for ski in range(0,30):  # 0-30页,我要每5页创建一个Excel文件
    skdf=pd.DataFrame()
    url='http://fz.people.com.cn/skygb/sk/index.php/index/seach/'+str(ski)
    reuqest=urllib.request.Request(url,headers=headers) 
    content=urllib.request.urlopen(reuqest).read()
    soup=BeautifulSoup(content,'lxml')
    tables=soup.findAll('table')
    tab=tables[2] # 查找发现tables[2]是我们要的数据
    skdata=pd.read_html(tab.prettify())
    skdf=pd.DataFrame(skdata[0])
    skdfs=skdfs.append(skdf)
    print('已经完成第'+str(ski)+'页')
    if((ski%10)==0):
        skdf.to_excel("skfiles/"+str(ski)+".xlsx",encoding='utf-8-sig') # 在skfiles文件夹下面
    time.sleep(np.random.randint(5))
# skdfs.to_excel("skfiles.xlsx",encoding='utf-8-sig')

在这里插入图片描述
每隔5页创建一个Excel文件:
在这里插入图片描述

数据合并(追加)

比如我们要把上面的5.xlsx到25.xlsx合并起来,应该如果做呢

方法一:Excel

在这里插入图片描述
调用查询编辑器power quer:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
导入数据源:将10.xlsx与25.xlsx进行连接:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时即追加成功

方法二:Python

我要将下图的两个Excel文件通过Python进行合并
在这里插入图片描述
注:不能直接写("skdf2810.xlsx",usecols=np.arange(1,21)) ,要确保Python与Excel的文件路径一致。

import numpy as np
import pandas as pd 

skdf1=pd.read_excel("skfiles/skdf2810.xlsx",usecols=np.arange(1,21)) 
skdf2=pd.read_excel("skfiles/skdf5020.xlsx",usecols=np.arange(1,21))

其中这句话的含义是:usecols=np.arange(1,21)当读取表格的时候只从第一列开始读,第0列不用读,因为0列没有多大意义。

在这里插入图片描述
合并:

skdf=skdf1.append(skdf2)
skdf.info

在这里插入图片描述
关于Python的merge:
如果我把数据分成两半,sheet1是原始数据,sheet2是sheet1的前3行,sheet3是sheet1的后三行,则是否可以使用merge将后两张表进行合并呢?
在这里插入图片描述

# 以stus为例

studf1=pd.read_excel("stus.xlsx","Sheet2")
studf2=pd.read_excel("stus.xlsx","Sheet3") # df1与df2没有共同语言
stusdf=pd.read_excel("stus.xlsx")

在这里插入图片描述

在这里插入图片描述
如果直接使用下面这句代码是会报错的,因为studf1studf2是没有相互关联的关键字(也就是两者没有共同语言),因此无法进行merge连接。

display(studf1,studf2,pd.merge(studf1,studf2)) # 报错

但是仔细想想,studf1和studf2分别都和studf有共同语言啊!

stusdfm=pd.merge(studf1,stusdf,how="left")
 #merge是考虑关系型数据,两者此时有共同语言

此时在sheet2最下面加一行数据:
在这里插入图片描述
此时就添加了:
在这里插入图片描述

# stusdfapp=studf1.append(studf2)
stusdfm=pd.merge(studf1,stusdf,how="left") #merge是考虑关系型数据

其中的how="left"是merge当中的一个参数,表示按照左边为索引进行合并,只有左边有该数据,则才会和右边的一起合并。而省略该参数则默认how=inner。

当我们把学号列添加到是studf2的时候,此时两者有了联系:
在这里插入图片描述
那么如果把学号改成stuid是否还能成功呢:
此时则涉及到merge的另外两个参数left_onright_on

left_on='学号',right_on='stuid'表示左边要合并的表的共同列为学号列,右边的为stuid列

stusdfm2=pd.merge(studf1,studf2,how="outer",left_on='学号',right_on='stuid') 
#可以对应,名称不重要,数据要相同

在这里插入图片描述

stusdfm3=pd.merge(studf1,studf2,on=suffixes=['_l','_r']) # 当两张表都有相同的学号数据
stusdfm3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温欣2030

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值