美文网首页
2018-06-28 对表格型数据进行采集

2018-06-28 对表格型数据进行采集

作者: 加勒比海带_4bbc | 来源:发表于2018-06-28 17:00 被阅读0次

# coding=utf-8

import requests

from bs4 import  BeautifulSoup

import re

import os

import json

import pymongo

import xlrd

import pandas as pd

import numpy as np

url = "http://www.hfzgncp.com.cn/index.php?m=content&c=index&a=lists&catid=59&sendtime=2018-06-29&page=1"

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0)' +\

              'Gecko/20100101 Firefox/61.0'}

r = requests.get(url,headers=headers)

html = r.text.encode(encoding='utf_8').decode()

soup = BeautifulSoup(html,"lxml")

table = soup.find('table', attrs={'class' :{'h_list_table r_list_table'}})

print(table)

#查看表格数据行数

height = len(table.findAll(lambda tag:tag.name=='tr' and

                          len(tag.findAll('td'))>=1))

print('height:'+str(height))

#收集表头

columns = [x.text for x in table.tr.findAll('th')]

columns = [x.replace('\xa0','') for x in columns]

print(columns)

#构造dataframe 准备存储表格

width = len(columns)  #表头列数

print('width:'+str(width))

df = pd.DataFrame(data = np.full((height,width),'',dtype = 'U'),columns = columns)

rows = [row for row in table.findAll('tr') if row.find('td')!=None]

#逐行分析表格

for i in range(len(rows)):

    cells = rows[i].findAll('td')

    if len(cells) == width:

        df.iloc[i] = [cell.text.replace(' ','').replace('\n','') for cell in cells]  #去点空格和换行

    else:

        w=len(cells)

        df.iloc[i,width-w:] = [cell.text.replace(' ','').replace('\n','') for cell in cells]

print(df)

sendtime = soup.find('input', attrs={'id' :{'sendtime'}})['value'].rstrip('/-') #获取数据时间

sendtimeStr=re.sub("\-","",sendtime)

print(sendtimeStr)

outputfile="D:/"+sendtimeStr+".xlsx"

df.to_excel(outputfile)

client= pymongo.MongoClient()

#获取一个数据库

db=client.priceSpider

#创建 或获取一个集合,并在collection下新建books

account=db.prcie   

data=xlrd.open_workbook("D:/"+sendtimeStr+".xlsx")

table=data.sheets()[0]

#读取excel第一行数据作为存入mongodb的字段名

rowstag=table.row_values(0)

nrows=table.nrows

#ncols=table.ncols #print rows

returnData={}

for i in range(1,nrows): 

    #将字段名和excel数据存储为字典形式,并转换为json格式 

    returnData[i]=json.dumps(dict(zip(rowstag,table.row_values(i)))) 

    #通过编解码还原数据 

    returnData[i]=json.loads(returnData[i]) 

    #print returnData[i] 

    account.insert(returnData[i])

相关文章

  • 2018-06-28 对表格型数据进行采集

    # coding=utf-8 import requests from bs4 import BeautifulS...

  • 市面上工业网关的主要类型有

    目前市面上的网关类型主要有单向型数据采集型、双向型简单版、双向增强版。 单向型数据采集型 对下具备串口或者网关,对...

  • 文件导出

    前言 大数据翻页型表格,配合参数进行数据文件导出,通过表单提交实现 Code

  • 帝国cms采集功能使用

    采集步骤: 1、增加采集节点; 2、预览采集正则是否正确; 3、开始采集; 4、对采集的数据进行审核并入库; 5、...

  • 大数据的ELK

    数据采集的ELK一般是是指ElasticsearchLogstashKibana Beats轻量型数据采集器,采集...

  • Pandas

    在Python中进行数据清洗和分析。常和Numpy、matplotlib一起使用。用来处理表格型或异质型数据,而N...

  • 地图(位置)数据现场采集工具(移动端)

    简介 在地图数据绘制过程中经常需要对现场数据进行采集标注或者对现有地图进行现场更正修改。但传统专业外业采集软件过于...

  • Android音视频编码(二)

    视频编码 说明:使用MediaCodec对由Camera采集的数据进行H264编码 1.采集视频数据参数设置:帧率...

  • R语言入门7:数据处理之双表操作-Dplyr

    在我们处理数据时,除了对单个表格进行处理,有时还需要对两个甚至多个表格进行操作。 1.数据框拼接:binding ...

  • 《利用Python进行数据分析》札记1

    本书主要讲解的是利用Python进行数据控制、处理、整理、分析等。书中所指的数据为: 多维数组矩阵 表格型数据,各...

网友评论

      本文标题:2018-06-28 对表格型数据进行采集

      本文链接:https://www.haomeiwen.com/subject/qjqnyftx.html