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标准库与第三方库详解
Jul 22 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
Python对象转JSON字符串的方法
Apr 27 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
python批量替换页眉页脚实例代码
Jan 22 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
python正则表达式之对号入座篇
Jul 24 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
python中设置超时跳过,超时退出的方式
Dec 13 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
php 远程关机操作的代码
2008/12/05 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
PHP中的替代语法介绍
2015/01/09 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
Python 调用DLL操作抄表机
2009/01/12 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
selenium自动化测试入门实战
2020/12/21 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
简历的个人自我评价范文
2014/01/03 职场文书
入党自我评价优缺点
2014/01/25 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
信息员培训方案
2014/06/12 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
班主任2015新年寄语
2014/12/08 职场文书