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数据类型转换函数总结
Mar 11 Python
Python标准库之随机数 (math包、random包)介绍
Nov 25 Python
python获取代理IP的实例分享
May 07 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
Django model反向关联名称的方法
Dec 15 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
pandas的qcut()方法详解
Jul 06 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
python使用opencv resize图像不进行插值的操作
Jul 05 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php遍历目录viewDir函数
2009/12/15 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
浅谈Django的缓存机制
2018/08/23 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
python手写均值滤波
2020/02/19 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
高中毕业生生活的自我评价
2013/12/08 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
村抢险救灾方案
2014/05/09 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
5.12护士节活动总结
2015/02/10 职场文书
贷款工作证明模板
2015/06/12 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle