Python基于pandas实现json格式转换成dataframe的方法


Posted in Python onJune 22, 2018

本文实例讲述了Python基于pandas实现json格式转换成dataframe的方法。分享给大家供大家参考,具体如下:

# -*- coding:utf-8 -*-
#!python3
import re
import json
from bs4 import BeautifulSoup
import pandas as pd
import requests
import os
from pandas.io.json import json_normalize
class image_structs():
  def __init__(self):
    self.picture_url = {
      "image_id": '',
      "picture_url": ''
    }
class data_structs():
  def __init__(self):
    # columns=['title', 'item_url', 'id','picture_url','std_desc','description','information','fitment'])
    self.info={
      "title":'',
      "item_url":'',
      "id":0,
      "picture_url":[],
      "std_desc":'',
      "description":'',
      "information":'',
      "fitment":''
    }
# "https://waldoch.com/store/catalogsearch/result/index/?cat=0&limit=200&p=1&q=nerf+bar"
# https://waldoch.com/store/new-oem-ford-f-150-f150-5-running-boards-nerf-bar-crew-cab-2015-w-brackets-fl34-16451-ge5fm6.html
def get_item_list(outfile):
  result = []
  for i in range(6):
    print(i)
    i = str(i+1)
    url = "https://waldoch.com/store/catalogsearch/result/index/?cat=0&limit=200&p="+i+"&q=nerf+bar"
    web = requests.get(url)
    soup = BeautifulSoup(web.text,"html.parser")
    alink = soup.find_all("a",class_="product-image")
    for a in alink:
      title = a["title"]
      item_url = a["href"]
      result.append([title,item_url])
  df = pd.DataFrame(result,columns=["title","item_url"])
  df = df.drop_duplicates()
  df["id"] =df.index
  df.to_excel(outfile,index=False)
def get_item_info(file,outfile):
  DEFAULT_FALSE = ""
  df = pd.read_excel(file)
  for i in df.index:
    id = df.loc[i,"id"]
    if os.path.exists(str(int(id))+".xlsx"):
      continue
    item_url = df.loc[i,"item_url"]
    url = item_url
    web = requests.get(url)
    soup = BeautifulSoup(web.text, "html.parser")
    # 图片
    imglink = soup.find_all("img", class_=re.compile("^gallery-image"))
    data = data_structs()
    data.info["title"] = df.loc[i,"title"]
    data.info["id"] = id
    data.info["item_url"] = item_url
    for a in imglink:
      image = image_structs()
      image.picture_url["image_id"] = a["id"]
      image.picture_url["picture_url"]=a["src"]
      print(image.picture_url)
      data.info["picture_url"].append(image.picture_url)
    print(data.info)
    # std_desc
    std_desc = soup.find("div", itemprop="description")
    try:
      strings_desc = []
      for ii in std_desc.stripped_strings:
        strings_desc.append(ii)
      strings_desc = "\n".join(strings_desc)
    except:
      strings_desc=DEFAULT_FALSE
    # description
    try:
      desc = soup.find('h2', text="Description")
      desc = desc.find_next()
    except:
      desc=DEFAULT_FALSE
    description=desc
    # information
    try:
      information = soup.find("h2", text='Information')
      desc = information
      desc = desc.find_next()
    except:
      desc=DEFAULT_FALSE
    information = desc
    # fitment
    try:
      fitment = soup.find('h2', text='Fitment')
      desc = fitment
      desc = desc.find_next()
    except:
      desc=DEFAULT_FALSE
    fitment=desc
    data.info["std_desc"] = strings_desc
    data.info["description"] = str(description)
    data.info["information"] = str(information)
    data.info["fitment"] = str(fitment)
    print(data.info.keys())
    singledf = json_normalize(data.info,"picture_url",['title', 'item_url', 'id', 'std_desc', 'description', 'information', 'fitment'])
    singledf.to_excel("test.xlsx",index=False)
    exit()
    # print(df.ix[i])
  df.to_excel(outfile,index=False)
# get_item_list("item_urls.xlsx")
get_item_info("item_urls.xlsx","item_urls_info.xlsx")

这里涉及到的几个Python模块都可以使用pip install命令进行安装,如:

pip install BeautifulSoup4
pip install xlrd
pip install openpyxl
Python 相关文章推荐
Python使用CMD模块更优雅的运行脚本
May 11 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
Python文件和流(实例讲解)
Sep 12 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
python实现LRU热点缓存及原理
Oct 29 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
深入浅析Python的类
Jun 22 #Python
基于python绘制科赫雪花
Jun 22 #Python
python3读取csv和xlsx文件的实例
Jun 22 #Python
django admin 后台实现三级联动的示例代码
Jun 22 #Python
python使用turtle库与random库绘制雪花
Jun 22 #Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 #Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 #Python
You might like
php简单获取复选框值的方法
2016/05/11 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
Python 初始化多维数组代码
2008/09/06 Python
Python and、or以及and-or语法总结
2015/04/14 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Python面向对象之继承代码详解
2018/01/29 Python
python列表的增删改查实例代码
2018/01/30 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
Python yield的用法实例分析
2020/03/06 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
新郎婚礼致辞
2015/07/27 职场文书
阳光体育运动标语口号
2015/12/26 职场文书