求助:python爬取国家统计局多个列表数据时出错

本人python小白,最近迷上国家统计局,想将统计局上的数据爬取下下,放到mysql。
第一步,爬取年度数据(默认为2010-2019年)
首先,上网查了类似的帖子,照葫芦画瓢,东拼西凑,磕磕碰碰,最终把代码整合在一起。初步成功,能把国家统计局上的年度数据,大部分拷贝下来。如下图

表中数据默认为2010-2019年,由于爬取列标题时,有“2019年”,但没有爬取到“2019年”对应的数据,估计为预留栏,故默认为0。
第二步,爬取年度数据(自定义LAST30)
由于统计局默认为前10年的数据,如需查看其它年份,需登录后通过手工选取年份查看。
再次上网东拼西凑后,貌似要加上session。
由于对session不了解,只能瞎猜,session是打开一个网页,然后模拟选取年份,查看相应的数据,理论上可行。
小试了一下,发现不对。爬了8个表,4个正常,4个异常。
A0101行政区划,爬取数据正常。
A0102人均主要工农业产品产量,爬取的数据居然是A0101行政区划的。
A010301也是显示A0101数据。
A010302数据正常。
A010303也是显示A0101数据。
A010401数据正常。
A010402也是显示A0101数据。
A010501数据正常。

完全搞不懂了,如果是代码问题,为什么隔一两个表又正常。
求助,session问题:
由于之前按照默认年份来爬取数据时,大部分数据都是正常的,因此问题应该出在选取年份的session上。
初步怀疑是后台没清理干净,一直存在爬取过的A0101表的数据。因此,选取年份操作时,对系统造成干扰,系统以为是基于A0101表的选取年份。
查了好多相关的帖子,但都是只爬取一个表(如A0101),不存在对下一表的的干扰问题,无法参考。
因此,发贴向各位大神求助。
附上爬取部分代码:

workbook=xlrd.open_workbook(r'D:\python\国家统计局列表清单V2.0.xlsx')
zb=workbook.sheet_by_name(u'sheet2')#打开"指标"表
rowsnum=zb.nrows#获取行数
colsnum=zb.ncols#获取行数
y=rowsnum
# 用来传递参数的
keyvalue = {}
# 用来自定义头部的
headers = {}
for x in range(3,y):#按列表循环爬数据#print (x)tablecode=zb.cell_value(x,10)tablename=zb.cell_value(x,3)result=zb.cell_value(x,14)#是否正常访问if result=="false":continuekeyvalue['m'] =zb.cell_value(x,4)#mkeyvalue['dbcode'] =zb.cell_value(x,5)#dbcodekeyvalue['rowcode'] =zb.cell_value(x,6)#rowcodekeyvalue['colcode'] =zb.cell_value(x,7)#colcodekeyvalue['wds'] = zb.cell_value(x,8)#wds#keyvalue['h'] = 1#hkeyvalue['dfwds'] = zb.cell_value(x,13)#dfwdskeyvalue['k1'] = str(datetime.datetime.now())#keyvalue['k1'] = str(gettime()#print  (keyvalue)# 目标网址(问号前面的东西)url = 'http://data.stats.gov.cn/easyquery.htm?'# 头部的填充headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) ' \'AppleWebKit/605.1.15 (KHTML, like Gecko) ' \'Version/12.0 Safari/605.1.15'# 发出请求,使用get方法,这里使用我们自定义的头部和参数response = requests.get(url, headers=headers, params=keyvalue)# 建立一个Sessions = requests.session()# 在Session基础上进行一次请求response = s.get(url, params=keyvalue, headers=headers)# 打印返回过来的状态码#print (response.status_code)# 修改dfwds字段内容#keyvalue['dfwds'] = zb.cell_value(x,15)#dfwds#print  (keyvalue)keyvalue['dfwds'] = '[{"wdcode":"sj","valuecode":"LAST30"}]'# 再次进行请求response = s.get(url, params=keyvalue, headers=headers)# 此时我们就能获取到我们搜索到的数据了s.cookies.clear()#s.close()#这个代码也试过,不行if response=="Error":print("爬取失败"+tablecode+tablename)continueAllData = json.loads(response.text)                  #获取总json数据

附上需爬取的列表,国家统计局列表清单V2.0.xlsx
(笨办法,自己上网一个个敲下来的)
第一次发帖子,不知道怎么加载程序文件,只好把全部代码粘贴进来。

import requests
import json
import time, datetime
import xlwt
import xlrd
from tkinter import *
from tkinter.messagebox import *
import threading
import os
import numpy as np
import pandas as pdimport math# -*- coding: utf-8 -*-
# 导入模块
import pymysqldef doSth():workbook=xlrd.open_workbook(r'D:\python\国家统计局列表清单V2.0.xlsx')zb=workbook.sheet_by_name(u'sheet2')#打开"指标"表rowsnum=zb.nrows#获取行数colsnum=zb.ncols#获取行数y=rowsnum# 用来传递参数的keyvalue = {}# 用来自定义头部的headers = {}        for x in range(3,y):#按列表循环爬数据#print (x)tablecode=zb.cell_value(x,10)tablename=zb.cell_value(x,3)result=zb.cell_value(x,14)#是否正常访问if result=="false":continuekeyvalue['m'] =zb.cell_value(x,4)#mkeyvalue['dbcode'] =zb.cell_value(x,5)#dbcodekeyvalue['rowcode'] =zb.cell_value(x,6)#rowcodekeyvalue['colcode'] =zb.cell_value(x,7)#colcodekeyvalue['wds'] = zb.cell_value(x,8)#wds#keyvalue['h'] = 1#hkeyvalue['dfwds'] = zb.cell_value(x,13)#dfwdskeyvalue['k1'] = str(datetime.datetime.now())#keyvalue['k1'] = str(gettime()#print  (keyvalue)# 目标网址(问号前面的东西)url = 'http://data.stats.gov.cn/easyquery.htm?'# 头部的填充headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) ' \'AppleWebKit/605.1.15 (KHTML, like Gecko) ' \'Version/12.0 Safari/605.1.15'# 发出请求,使用get方法,这里使用我们自定义的头部和参数response = requests.get(url, headers=headers, params=keyvalue)# 建立一个Sessions = requests.session()# 在Session基础上进行一次请求response = s.get(url, params=keyvalue, headers=headers)# 打印返回过来的状态码#print (response.status_code)# 修改dfwds字段内容#keyvalue['dfwds'] = zb.cell_value(x,15)#dfwds#print  (keyvalue)keyvalue['dfwds'] = '[{"wdcode":"sj","valuecode":"LAST30"}]'# 再次进行请求response = s.get(url, params=keyvalue, headers=headers)# 此时我们就能获取到我们搜索到的数据了s.cookies.clear()#session.invalidate()#s.clear()#s.close()if response=="Error":print("爬取失败"+tablecode+tablename)continueAllData = json.loads(response.text)                  #获取总json数据Rows = AllData['returndata']['wdnodes'][1]['nodes']#行标签Rows_list = []for i in range(len(Rows)):row = Rows[i]['cname']Rows_list.append(row)#print (Rows_list)#print (len(Rows_list))Columns = AllData['returndata']['wdnodes'][0]['nodes']#列标签Columns_list = []for j in range(len(Columns)):col = Columns[j]['cname']Columns_list.append(col)#print (Columns_list)#print (Columns_list[0])data=AllData['returndata']['datanodes']#总数据data_list = []for k in range(len(data)):da = data[k]['data']['strdata']if da=="":                da="0"data_list.append(da)# 打开数据库连接db = pymysql.connect(host='localhost', user='root', password='0126')# 使用cursor()方法创建一个游标对象cursorcursor = db.cursor()#dbname=str(k5[0:10])#print (dbname)sql="create database "+"AllChinaData30Years"try:# 执行sql语句cursor.execute(sql)# 提交到数据库执行db.commit()except:# Rollback in case there is any errordb.rollback()# 新建数据表db = pymysql.connect('localhost', 'root', '0126', 'AllChinaData30Years')cursor = db.cursor()sql="create table "+ tablecode+tablename+"(指标 varchar(100) not null"for i in range(len(Rows)):sql = sql +","+Rows_list[i]+" varchar(100) not null"           sql = sql + ")"#sql =str(sql)#print (sql)    try:# 执行sql语句cursor.execute(sql)# 提交到数据库执行db.commit()except:# Rollback in case there is any errordb.rollback()# 插入行数据for s in range(len(Columns)):db = pymysql.connect('localhost', 'root', '0126', 'AllChinaData30Years')cursor = db.cursor()sql="INSERT "+ tablecode+tablename+" VALUES("+"\""+Columns_list[s]+"\""for t in range(len(Rows)):u=s*len(Rows)+tif data_list[u]=="":data_list[u]="0"if t==0:sql = sql + ",0"else:sql = sql +","+data_list[u]         sql = sql + ")"#print (sql)    try:# 执行sql语句cursor.execute(sql)# 提交到数据库执行db.commit()except:# Rollback in case there is any errordb.rollback()# 关闭数据库连接db.close()print("成功爬取"+tablecode+tablename)print ("OK")#以下代码为之前其它程序定时爬取用途
def main(h1=10,h2=20):# 一般网站都是9点更新数据,所以每天10点启动while True:now = datetime.datetime.now()# #print(now.hour, now.minute)if now.hour == h1 or now.hour == h2:breakdoSth()
while True:main()time.sleep(3600)# 每隔3600秒检测一次

求助:python爬取国家统计局多个列表数据时出错相关推荐

  1. python爬取抖音用户数据_使用python爬取抖音视频列表信息

    如果看到特别感兴趣的抖音vlogger的视频,想全部dump下来,如何操作呢?下面介绍介绍如何使用python导出特定用户所有视频信息 抓包分析 Chrome Deveploer Tools Chro ...

  2. python爬取B站关注列表

    python爬取B站关注列表 一.数据库的设计与操作 1.数据的分析 2.数据库设计 3.数据库操作 二.爬虫 三.完整代码 四.[项目仓库](https://github.com/Concyclic ...

  3. python爬取股票信息_利用Python爬取网易上证所有股票数据(代码

    利用Python爬取网易上证所有股票数据(代码 发布时间:2018-04-14 17:30, 浏览次数:1261 , 标签: Python import urllib.request import r ...

  4. 通过爬取天猫商品评论实例分析Python爬取ajax动态生成的数据

    本文主要通过爬取天猫商品kindle的评论为例来说明利用python爬取ajax动态生成的数据的方式,本文使用的工具如下: 工具 chrome浏览器[寻找评论的动态链接] python3.5[执行代码 ...

  5. python 爬取自如租房的租房数据,使用图像识别获取价格信息

    python 爬取自如租房的租房数据 完整代码下载:https://github.com/tanjunchen/SpiderProject/tree/master/ziru #!/usr/bin/py ...

  6. 使用Python爬取51job招聘网的数据

    使用Python爬取51job招聘网的数据 进行网站分析 获取职位信息 存储信息 最终代码 进行网站分析 进入https://www.51job.com/这个网站 我在这就以python为例搜索职位跳 ...

  7. 练习:使用Python爬取COVID-19疫情国内当日数据

    练习:使用Python爬取COVID-19疫情国内当日数据 推荐公众号:数据酷客 (里面有超详细的教程) 代码来源数据酷客公众号教程 URL它是Uniform Resource Locator的缩写, ...

  8. 如何使用python编程抢京东优惠券 知乎_学好Python爬取京东知乎价值数据

    原标题:学好Python爬取京东知乎价值数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这 ...

  9. python如何爬取实时人流量_使用python爬取微信宜出行人流量数据

    代码地址:https://liujiao111.github.io/2019/06/18/easygo/ 工具介绍: 该工具基于微信中的宜出行提供的数据接口进行爬取,能够爬取一定范围内的当前时间点的人 ...

  10. 使用python爬取BOSS直聘岗位数据并做可视化(Boss直聘对网页做了一些修改,现在的代码已经不能用了)

    使用python爬取BOSS直聘岗位数据并做可视化 结果展示 首页 岗位信息 岗位详情 薪资表 学历需求 公司排名 岗位关键词 福利关键词 代码展示 爬虫代码 一.导入库 二.爬取数据 1.爬取数据代 ...

最新文章

  1. JavaMail邮件发送不成功的那些坑人情况及分析说明
  2. windows下编译leveldb
  3. 5分钟学会Java 9~Java11的七大新特性
  4. Uber开源TensorFlow框架工具箱Ludwig,无需编码即可进行深度学习开发
  5. .NET简谈组件程序设计之(异步委托)
  6. Cpp 对象模型探索 / 继承关系下的虚函数手动调用
  7. git add . 出现错误 The file will have its original line endings in your working directory. 解决方案...
  8. 如何将本地项目上传至GitHub
  9. LimeSurvey问卷调查管理系统
  10. 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码...
  11. go语言php编译,golang怎么编译
  12. 阿里代码规范检测工具-eclipse
  13. 俞扬 新书_哇,太好了...新书
  14. 【题解】LuoGu4158:粉刷匠
  15. MBR2060FCT肖特基二极管,ASEMI品牌原装ASEMI品牌肖特基二极管MBR2060FCT,最大正向整流电流:20A;反向峰值电压:60V;MBR2060FCT广泛应用于开关电源、LED电源
  16. 自动化玩腾讯微证券领长牛python实现---学习记录
  17. 国内CDN加速哪个好?
  18. Python词云实现
  19. css中脱离标准流的三种方式,CSS的三种手段让元素脱离标准本文档流
  20. jvm内存模型与垃圾回收

热门文章

  1. android 4.4.2海信电视,ROOT海信电视Android4.0的详细步骤
  2. 像中文的罗马音字体复制_罗马音大全可复制app
  3. 2018深圳杯B题无限拓扑回传规划题解
  4. 作为非计算机专业的我,是如何拿下软考软件设计师的?
  5. RecyclerView实现京东分类联动效果
  6. zabbix保姆级安装教程
  7. 什么是简单边界点(Simple border points)
  8. python银行卡号识别_EAST+CRNN银行卡号识别,附数据集
  9. xshell 6安装教程
  10. 最小可分辨温差四杆靶空间频率选择