pwjcw 2021-08-15 19:24 采纳率: 66.7%
浏览 98
已结题

python爬取码市导入excel中导入结果只导入最后一条的问题

爬取的数据是没有问题的,就是数据导入的结果出现了问题,我也知道是语法的不对,不知道咋改,导入excel使用的模块是openxlpy,这个问题困扰好长时间,求指教,源代码如下:


```python

import requests
from jsonpath import jsonpath
import json,xlwt,openpyxl
def requests_data(page):
    url='https://www.codemart.com/api/project?page={}'.format(page)
    headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36','accept': 'application/json'}
    response=requests.get(url,headers=headers)
    response.encoding = response.apparent_encoding
    data=json.loads(response.text)
    return data

def clean_data():
    get_data=requests_data(1)
    maxpage=jsonpath(get_data,'$..totalPage')[0]   #获取最大页数
    return maxpage

def send_data():
    maxpage=clean_data()
    for i in range(1,maxpage+1):    #遍历每一页
        final_data=requests_data(i)   #获取该页总数据
        # project_name=jsonpath(final_data,'$..name')  #在该页数据中提取处项目名称
        project_name=final_data['rewards']   #获取该页数据中目标数据
        list=[]
        for p in project_name:
            name = p['name']
            money = p['price']
            roles = p['roles']
            type = p['typeText']
            # list.append([name,roles,type,money])
            list = [name, roles, type, money]
            print(list)
            save(list)

def save(list):
        wb = openpyxl.Workbook()  # 创建一个工作簿
        sheet = wb.active  # 创建一个活动表
        list3 = ['项目', '招募', '类型', '金额']
        sheet.append(list3)
        sheet.append(list)
        wb.save('data.xlsx')

if __name__=='__main__':
    send_data()



















最终的excel结果是这样的

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/600948720926127.png 'image.png')




  • 写回答

3条回答 默认 最新

  • Roc-xb 后端领域优质创作者 2021-08-15 19:43
    关注

    修改了一下程序,有帮助的话,望采纳!

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    """
    @author: Roc-xb
    
    """
    
    import requests
    from jsonpath import jsonpath
    import json, xlwt, openpyxl
    
    
    def requests_data(page):
        url = 'https://www.codemart.com/api/project?page={}'.format(page)
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
            'accept': 'application/json'}
        response = requests.get(url, headers=headers)
        response.encoding = response.apparent_encoding
        data = json.loads(response.text)
        return data
    
    
    def clean_data():
        get_data = requests_data(1)
        maxpage = jsonpath(get_data, '$..totalPage')[0]  # 获取最大页数
        return maxpage
    
    
    def send_data():
        maxpage = clean_data()
        items = []
        for i in range(1, maxpage + 1):  # 遍历每一页
            final_data = requests_data(i)  # 获取该页总数据
            # project_name=jsonpath(final_data,'$..name')  #在该页数据中提取处项目名称
            project_name = final_data['rewards']  # 获取该页数据中目标数据
            for p in project_name:
                name = p['name']
                money = p['price']
                roles = p['roles']
                type = p['typeText']
                item = [name, roles, type, money]
                items.append(item)
                print(item)
        save(items)
    
    
    def save(items):
        wb = openpyxl.Workbook()  # 创建一个工作簿
        sheet = wb.active  # 创建一个活动表
        list3 = ['项目', '招募', '类型', '金额']
        sheet.append(list3)
        for item in items:
            sheet.append(item)
        wb.save('data.xlsx')
    
    
    if __name__ == '__main__':
        send_data()
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 修改了问题 8月15日
  • 创建了问题 8月15日

悬赏问题

  • ¥20 cesm的气溶胶排放文件
  • ¥15 给出完整代码不行就看胜利胜利了胜利
  • ¥30 关于#wpf# devexpress的问题:选中时是黑色未选中是白色字体,想要更改未选中时字体的颜色(语言-c#)
  • ¥15 逐月累计,月份不连续,补齐月份
  • ¥15 应用简单的Python代码完成一个学生成绩管理系统
  • ¥15 用matlab求微分方程初值问题
  • ¥15 vscode下编写第三方库opencv与pcl代码时没有代码提示
  • ¥15 能够跑通不报错,如何解决?(标签-matlab)
  • ¥15 MOS在RDS较大,频率高时开关波形异常
  • ¥15 SCENIC分析报错求解答