鱼C论坛

 找回密码
 立即注册
查看: 3006|回复: 5

用Python2.7 抓取空气质量数据

[复制链接]
发表于 2018-3-3 12:23:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wu1996 于 2018-3-4 15:50 编辑

2311321.png   从网上复制的代码  却出错  求解答
from urllib2 import urlopen
from bs4 import BeautifulSoup
import re
import numpy
import csv

def getdatawithtablehead(url):
     """ 该函数用于获取带表头的数据 """
     html=urlopen(url)
     bsobj=BeautifulSoup(html,"lxml") # 获取BeautifulSoup对象

    tablelist=bsobj.findAll("tr") # 获取所有的表格

    Dataset=[]
     tablehead=tablelist[0].get_text().strip("\n").split("\n\n")
     Dataset.append(tablehead) # 获取表头

    for datalist in tablelist[1:]:
         data=datalist.get_text().replace(" ","").replace("\n\r","").\
         strip("\n").split("\n")
         Dataset.append(data) # 获取当月每一天的数据

    return Dataset

def getdata(url):
     """ 该函数用于获取不带表头的数据 """
     html=urlopen(url)
     bsobj=BeautifulSoup(html,"lxml")

     tablelist=bsobj.findAll("tr")

     dataset=[]
     for datalist in tablelist[1:]:
         data=datalist.get_text().replace(" ","").replace("\n\r","").\
         strip("\n").split("\n")
         dataset.append(data)

     return dataset

# 兰州空气质量指数(AQI)-PM2.5查询地址:
starturl="http://www.tianqihoubao.com/aqi/lanzhou.html"
html=urlopen(starturl)
bsobj=BeautifulSoup(html,"lxml") # 获取BeautifulSoup对象

# 找到所有存放月度数据的网页链接,并以列表的形式按月份先后顺序保存这些链接
Sites=[]
for link in bsobj.findAll(href=re.compile("^(/aqi/lanzhou-)")):
     site="http://www.tianqihoubao.com"+link.attrs['href']
     Sites.append(site)
Sites.reverse()

Dataset=getdatawithtablehead(Sites[0]) # 获取表头和第一个月度数据

for url in Sites[1:]:
     dataset=getdata(url)
     Dataset=numpy.row_stack((Dataset,dataset)) # 获取所有月度数据

csvfile=open("Dataset.csv","w+") # 创建csv文件用于保存数据
try:
     writer=csv.writer(csvfile)
     for i in range(numpy.shape(Dataset)[0]):
         writer.writerow((Dataset[i,:])) # 将数据逐行写入csv文件
finally:
     csvfile.close() # 关闭csv文件




可以帮我看下问题出在哪吗   怎么修改    毕业论文急需   谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-3 14:07:22 | 显示全部楼层
看报错,说你的输入列的维度除了浓度列以外不匹配,你可以再重新确定下代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-3 22:11:43 | 显示全部楼层
likesunshine 发表于 2018-3-3 14:07
看报错,说你的输入列的维度除了浓度列以外不匹配,你可以再重新确定下代码

from urllib2 import urlopen
from bs4 import BeautifulSoup
import re
import numpy
import csv

def getdatawithtablehead(url):
    """ 该函数用于获取带表头的数据 """
    html=urlopen(url)
    bsobj=BeautifulSoup(html,"lxml") # 获取BeautifulSoup对象

    tablelist=bsobj.findAll("tr") # 获取所有的表格

    Dataset=[]
    tablehead=tablelist[0].get_text().strip("\n").split("\n\n")
    Dataset.append(tablehead) # 获取表头

    for datalist in tablelist[1:]:
        data=datalist.get_text().replace(" ","").replace("\n\r","").\
        strip("\n").split("\n")
        Dataset.append(data) # 获取当月每一天的数据

    return Dataset

def getdata(url):
    """ 该函数用于获取不带表头的数据 """
    html=urlopen(url)
    bsobj=BeautifulSoup(html,"lxml")

    tablelist=bsobj.findAll("tr")

    dataset=[]
    for datalist in tablelist[1:]:
        data=datalist.get_text().replace(" ","").replace("\n\r","").\
        strip("\n").split("\n")
        dataset.append(data)

    return dataset

# 兰州空气质量指数(AQI)-PM2.5查询地址:
starturl="http://www.tianqihoubao.com/aqi/lanzhou.html"
html=urlopen(starturl)
bsobj=BeautifulSoup(html,"lxml") # 获取BeautifulSoup对象

# 找到所有存放月度数据的网页链接,并以列表的形式按月份先后顺序保存这些链接
Sites=[]
for link in bsobj.findAll(href=re.compile("^(/aqi/lanzhou-)")):
    site="http://www.tianqihoubao.com"+link.attrs['href']
    Sites.append(site)
Sites.reverse()

Dataset=getdatawithtablehead(Sites[0]) # 获取表头和第一个月度数据

for url in Sites[1:]:
    dataset=getdata(url)
    Dataset=numpy.row_stack((Dataset,dataset)) # 获取所有月度数据

csvfile=open("Dataset.csv","w+") # 创建csv文件用于保存数据
try:
    writer=csv.writer(csvfile)
    for i in range(numpy.shape(Dataset)[0]):
        writer.writerow((Dataset[i,:])) # 将数据逐行写入csv文件
finally:
    csvfile.close() # 关闭csv文件




可以帮我看下问题出在哪吗   怎么修改    毕业论文急需   谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 10:06:37 | 显示全部楼层
给你顶一下吧,我也不知道咋解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 10:23:44 | 显示全部楼层
你的 Dataset=numpy.row_stack((Dataset,dataset)) # 获取所有月度数据 这行第一个参数必须得是个矩阵(就是二维数组)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-7 21:12:07 | 显示全部楼层
求大神帮忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 07:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表