鱼C论坛

 找回密码
 立即注册
查看: 1707|回复: 7

[已解决]Pandas保存excel的一些疑问 希望大佬帮忙~

[复制链接]
发表于 2022-8-13 12:14:51 | 显示全部楼层 |阅读模式
8鱼币
本帖最后由 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 = [x for i,x in enumerate(b) if x.find('\ue147') != -1]
    #删除元素
    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([pf1,pf2,pf3,pf4,pf5],axis=1)
    pf.to_excel('E:\\pytest\\租房数据.xlsx',index=False)

    print('保存完毕')


下面是写入数据的情况 爬取了3页的数据 每页大概是60条数据 按道理来说应该有120以上的数据 但是只有60条 而且还覆盖了前一页的数据
最佳答案
2022-8-13 12:14:52
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 = [x for i,x in enumerate(b) if x.find('\ue147') != -1]
    #删除元素
    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[0].extend(Real_estate)
    mydata[1].extend(b)
    mydata[2].extend(c)
    mydata[3].extend(dd)
    mydata[4].extend(f)

mydata_a = {
    '房品名称':mydata[0],
    '面积及楼层':mydata[1],
    '小区名称':mydata[2],
    '房子区域':mydata[3],
    '租金':mydata[4],
}

pf=pd.DataFrame(mydata_a)
pf.to_excel('E:\\pytest\\租房数据.xlsx',index=False)
print('保存完毕')
uTools_1660364211773.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 12:14:52 | 显示全部楼层    本楼为最佳答案   
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 = [x for i,x in enumerate(b) if x.find('\ue147') != -1]
    #删除元素
    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[0].extend(Real_estate)
    mydata[1].extend(b)
    mydata[2].extend(c)
    mydata[3].extend(dd)
    mydata[4].extend(f)

mydata_a = {
    '房品名称':mydata[0],
    '面积及楼层':mydata[1],
    '小区名称':mydata[2],
    '房子区域':mydata[3],
    '租金':mydata[4],
}

pf=pd.DataFrame(mydata_a)
pf.to_excel('E:\\pytest\\租房数据.xlsx',index=False)
print('保存完毕')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 12:44:30 | 显示全部楼层
要么前后数据合并成一个,然后最后一次写入
要么用open或者xwl追加写入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 12:57:11 | 显示全部楼层
多加一条
writer = pd.ExcelWriter(表格名)
pf.to_excel(writer, sheet_name='sheet1')
writer.save()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 13:14:40 | 显示全部楼层
你的pf.to_excel是在for循环里面的,所以最终保存的只有一页数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-13 23:25:48 | 显示全部楼层
theS 发表于 2022-8-13 13:14
你的pf.to_excel是在for循环里面的,所以最终保存的只有一页数据。

如果不在for 循环里面 也是只有一页的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-13 23:44:16 | 显示全部楼层

试了 还是会覆盖前一页的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-14 05:18:31 | 显示全部楼层
另外,你这里range(1,3) 爬取的只有2页,而不是3页。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表