V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jin6220
V2EX  ›  Python

爬虫天气数据是 js 数据怎么录入 excel 啊?

  •  
  •   jin6220 · 2017-10-05 15:52:42 +08:00 · 3936 次点击
    这是一个创建于 2607 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2017-10-06 17:07:33 +08:00
    新问题请问大家:
    给定 20111,20162 这两个数字
    怎么生成 20111,20112,20113,,,,,,,,,201112,,,20162 这之间的年-月时间顺序列表啊?
    网上查的是这样的:
    import datetime

    def datelist(start, end):
    start_date = datetime.date(*start)
    end_date = datetime.date(*end)

    result = []
    curr_date = start_date
    while curr_date != end_date:
    result.append("%04d%02d%02d" % (curr_date.year, curr_date.month, curr_date.day))
    curr_date += datetime.timedelta(1)
    result.append("%04d%02d%02d" % (curr_date.year, curr_date.month, curr_date.day))
    return result

    if __name__ == "__main__":
    print datelist((2014, 7, 28), (2014, 8, 3))

    作者:匿名用户
    链接: https://www.zhihu.com/question/35455996/answer/62834666
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    但是这个是年月日。
    第 2 条附言  ·  2017-10-06 18:23:24 +08:00
    https://json-csv.com/
    最终靠的是这个网址,终于转换了。
    22 条回复    2017-10-06 20:00:33 +08:00
    qiayue
        1
    qiayue  
       2017-10-05 15:56:52 +08:00
    掐头去尾就是 json
    112Cookie
        2
    112Cookie  
       2017-10-05 16:07:21 +08:00 via Android
    python 直接写 xls。。
    jin6220
        3
    jin6220  
    OP
       2017-10-05 16:07:43 +08:00
    @qiayue 先把首尾的 var weather_str=、分号去掉,变成 json,再存入表格里吗
    好久没用过把入门级的那点知识也忘了差不多了
    qiayue
        4
    qiayue  
       2017-10-05 16:17:59 +08:00
    json 解码之后,再按照 xls 格式去写
    zagreb
        5
    zagreb  
       2017-10-05 16:27:46 +08:00 via iPhone
    jin6220
        6
    jin6220  
    OP
       2017-10-05 16:34:03 +08:00
    @zagreb 谢谢 虽然看不懂啊 ,业余非专业,现在去找找别人的代码看怎么处理类似情况的。
    8qwe24657913
        7
    8qwe24657913  
       2017-10-05 16:43:32 +08:00
    @qiayue #1 然而单引号……好在数据里应该不会出现单双引号,所以无脑 replace 大概也没问题……
    asuraa
        8
    asuraa  
       2017-10-05 18:12:14 +08:00
    保存 csv 不就行了?
    table 标签嘛
    shenyu1996
        9
    shenyu1996  
       2017-10-05 18:23:04 +08:00 via Android
    直接用字符串模板写 cvs 逗号分隔, 好像 /d/n 换行来着
    jin6220
        10
    jin6220  
    OP
       2017-10-05 19:07:35 +08:00
    @luodaoyi
    找了个 csv 案例,
    import csv
    with open('names.csv','w') as csvfile:
    fieldnames = ['first_name','last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

    但是,天气那个 js 数据怎么每一天数据单独写入一行啊?

    fieldnames = ['Ymd',‘ bWendu',’ yWendu',’ fengxiang','fengli ’]
    然后继续把每个日期的数据像字典这样放进吗?
    ‘ ymd:'2011-02-01',’ bWendu ‘:'9℃',’ yWendu ‘:'0℃',’ tianqi ‘:'多云',’ fengxiang ‘:'北风',’ fengli ‘:'微风'
    就是不知道如何完全自动化。。。
    dawnven
        11
    dawnven  
       2017-10-05 19:15:24 +08:00 via Android
    可以正则提取成 csv
    hcymk2
        12
    hcymk2  
       2017-10-05 19:22:59 +08:00
    明显不是 json ,而是 jsonp.
    asuraa
        13
    asuraa  
       2017-10-05 20:08:06 +08:00
    @jin6220 正则提取 json,然后写入就行了。。。
    python 直接用 xlwt 写就行了
    ZXCDFGTYU
        14
    ZXCDFGTYU  
       2017-10-05 20:26:36 +08:00 via iPad
    掐头去尾 json+1
    jin6220
        15
    jin6220  
    OP
       2017-10-05 20:51:01 +08:00
    import xlwt
    #创建 workbook 和 sheet 对象
    workbook = xlwt.Workbook() #注意 Workbook 的开头 W 要大写
    sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
    sheet2 = workbook.add_sheet('sheet2',cell_overwrite_ok=True)
    #向 sheet 页中写入数据
    sheet1.write(0,0,'this should overwrite1')
    sheet1.write(0,1,'aaaaaaaaaaaa')
    sheet2.write(0,0,'this should overwrite2')
    sheet2.write(1,2,'bbbbbbbbbbbbb')

    但实际上数据输入不可能是手一个一个录入啊,http://tianqi.2345.com/t/wea_history/js/56294_20112.js ,那么多数据,真不知道怎么自动化输入,这种挫败感让人很让人伤心加恼火。。。
    sola97
        16
    sola97  
       2017-10-05 21:06:24 +08:00 via Android
    @jin6220 一组数据往里添一行就行了,不用定坐标
    mkeith
        17
    mkeith  
       2017-10-05 21:11:33 +08:00 via iPhone
    那么多的天气 API 非要用这个啊?
    kangkang
        18
    kangkang  
       2017-10-05 21:13:18 +08:00 via iPhone
    搞成 json 用 python 写进 excel
    Sapp
        19
    Sapp  
       2017-10-05 21:46:06 +08:00 via Android
    这不就是 json 吗?
    geelaw
        20
    geelaw  
       2017-10-05 22:00:03 +08:00   ❤️ 1
    两个命令用管道连接一下即可

    ConvertFrom-Json | ConvertTo-Csv

    然后 Excel 打开,另存为 xls(x) 即可。

    如果想直接弄成 xls(x),可以用 Excel.Application 对象操作 Excel https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-object-excel
    jin6220
        21
    jin6220  
    OP
       2017-10-06 17:23:19 +08:00
    手动几次生成了时间列表
    [20111, 20112, 20113, 20114, 20115, 20116, 20117, 20118, 20119, 201110, 201111, 201112,20121, 20122, 20123, 20124, 20125, 20126, 20127, 20128, 20129, 201210, 201211, 201212,20131, 20132, 20133, 20134, 20135, 20136, 20137, 20138, 20139, 201310, 201311, 201312,20141, 20142, 20143, 20144, 20145, 20146, 20147, 20148, 20149, 201410, 201411, 201412,20151, 20152, 20153, 20154, 20155, 20156, 20157, 20158, 20159, 201510, 201511, 201512,20161, 20162,201603, 201604, 201605, 201606, 201607, 201608, 201609, 201610, 201611, 201612,201701, 201702, 201703, 201704, 201705, 201706, 201707, 201708, 201709]
    xieranmaya
        22
    xieranmaya  
       2017-10-06 20:00:33 +08:00
    跑起来,以 csv 格式写到文件里
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6065 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.