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 相关文章推荐
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
python中私有函数调用方法解密
Apr 29 Python
python正则分析nginx的访问日志
Jan 17 Python
浅谈python中的__init__、__new__和__call__方法
Jul 18 Python
python实现感知器算法详解
Dec 19 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
python-tkinter之按钮的使用,开关方法
Jun 11 Python
python 函数中的参数类型
Feb 11 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
Python Pygame实现俄罗斯方块
Feb 19 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中的时间处理
2006/10/09 PHP
初识php MVC
2014/09/10 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
php cookie 详解使用实例
2016/11/03 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python超简单解决约瑟夫环问题
2015/05/12 Python
Python入门_条件控制(详解)
2017/05/16 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
五种Python转义表示法
2020/11/27 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
Java语言的优势
2015/01/10 面试题
高校生生产实习自我鉴定
2013/09/21 职场文书
社区两委对照检查材料
2014/08/23 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书