Pandas保存excel的一些疑问 希望大佬帮忙~
本帖最后由 admintest166 于 2022-8-13 12:18 编辑在爬取完 安居客的数据以后 想保存为excel 方便做数据分析
但是我每爬取一页数据写入excel时 都会覆盖掉前一页的数据想问下各位大佬有什么方法 可以不覆盖原有数据 新数据追加在后面的方法呢
import requests
from pyquery import PyQuery as pq
import re
import pandas as pd
import time
b=[]
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47'
}
for i in range(1,3):
print(i)
url='https://gl.zu.anjuke.com/fangyuan/p{}/'.format(i)
request=requests.get(url,headers=headers).text
doc=pq(request)
#房品名称
Real_estate=[]
#a=doc('a .strongbox').eq(2).text()
#提取房品名称
a=doc('.zu-info a b').items()
for i in a:
Real_estate.append(i.text())
print(len(Real_estate))
#提取面积及楼层
b=doc('.details-item.tag').text().split(' ')
data =
#删除元素
for i in data:
b.remove(i)
print(b)
#提取租房小区名称
c=doc('.details-item a').text().split(' ')
#提取租房区域
d=doc('.zu-info address').text()
dd=re.findall(r'[\u4e00-\u9fa5]{2}-',d)
#提取租金
f=doc('.zu-side p b').text().split()
time.sleep(5)
pf1=pd.DataFrame()
pf1['房品名称']=Real_estate
pf2=pd.DataFrame()
pf2['面积及楼层']=b
pf3=pd.DataFrame()
pf3['小区名称']=c
pf4=pd.DataFrame()
pf4['房子区域']=dd
pf5=pd.DataFrame()
pf5['租金']=f
pf=pd.concat(,axis=1)
pf.to_excel('E:\\pytest\\租房数据.xlsx',index=False)
print('保存完毕')
下面是写入数据的情况 爬取了3页的数据 每页大概是60条数据 按道理来说应该有120以上的数据 但是只有60条 而且还覆盖了前一页的数据
import requests
from pyquery import PyQuery as pq
import re
import pandas as pd
import time
b=[]
mydata = [[].copy() for _ in range(5)]
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47'
}
for i in range(1,3):
print(i)
url='https://gl.zu.anjuke.com/fangyuan/p{}/'.format(i)
request=requests.get(url,headers=headers).text
doc=pq(request)
#房品名称
Real_estate=[]
#a=doc('a .strongbox').eq(2).text()
#提取房品名称
a=doc('.zu-info a b').items()
for i in a:
Real_estate.append(i.text())
print(len(Real_estate))
#提取面积及楼层
b=doc('.details-item.tag').text().split(' ')
data =
#删除元素
for i in data:
b.remove(i)
print(b)
#提取租房小区名称
c=doc('.details-item a').text().split(' ')
#提取租房区域
d=doc('.zu-info address').text()
dd=re.findall(r'[\u4e00-\u9fa5]{2}-',d)
#提取租金
f=doc('.zu-side p b').text().split()
time.sleep(5)
# pf1=pd.DataFrame()
# pf1['房品名称']=Real_estate
#
# pf2=pd.DataFrame()
# pf2['面积及楼层']=b
#
# pf3=pd.DataFrame()
# pf3['小区名称']=c
#
# pf4=pd.DataFrame()
# pf4['房子区域']=dd
#
# pf5=pd.DataFrame()
# pf5['租金']=f
mydata.extend(Real_estate)
mydata.extend(b)
mydata.extend(c)
mydata.extend(dd)
mydata.extend(f)
mydata_a = {
'房品名称':mydata,
'面积及楼层':mydata,
'小区名称':mydata,
'房子区域':mydata,
'租金':mydata,
}
pf=pd.DataFrame(mydata_a)
pf.to_excel('E:\\pytest\\租房数据.xlsx',index=False)
print('保存完毕')
要么前后数据合并成一个,然后最后一次写入
要么用open或者xwl追加写入 多加一条
writer = pd.ExcelWriter(表格名)
pf.to_excel(writer, sheet_name='sheet1')
writer.save()
你的pf.to_excel是在for循环里面的,所以最终保存的只有一页数据。 theS 发表于 2022-8-13 13:14
你的pf.to_excel是在for循环里面的,所以最终保存的只有一页数据。
如果不在for 循环里面 也是只有一页的数据 Py与C。。。 发表于 2022-8-13 12:57
多加一条
试了 还是会覆盖前一页的数据 另外,你这里range(1,3) 爬取的只有2页,而不是3页。
页:
[1]