python爬取税务局并将数据保存在Excel

目标地址:http://www.chinatax.gov.cn/chinatax/n810346/n810825/index.html

  1. 采集
    采集以下栏目:
    增值税、消费税的前两页数据
    每个栏目的:
    标题、发文日期、文号

  2. 保存
    将所有信息保存到税务局.xlsx文件,依据栏目名创建数据表,每个栏目的数据保存到对应的数据表

还是先找到目标数据(如果没有记得刷新):
在这里插入图片描述
这样就可以获取它的url、请求头之类的信息(点击那个Headers),最后根据自己的思路一步步爬取:
导入相关库:

import openpyxl
import requests
import json
import time
import pprint

请求头:

url = 'http://www.chinatax.gov.cn/api/query'
params = {
    'siteCode': 'bm29000fgk',
    'tab': 'all',
    'key': '9A9C42392D397C5CA6C1BF07E2E0AA6F'
}
headers = {
    'Host': 'www.chinatax.gov.cn',
    'Origin': 'http://www.chinatax.gov.cn',
    'Referer': 'http://www.chinatax.gov.cn/chinatax/n810346/n810825/index.html',
    'User-Agent': '你的user-agent',
    'Cookie': '你的cookie'
}

获取form_data数据(都是在Headers那里可以得到):

def get_data(con, page):
    form_data = {
        'timeOption': '0',
        'C6': f'{con}',          # 关键字
        'page': f'{page}',      # 实现翻页
        'pageSize': '10',
        'keyPlace': '1',
        'sort': 'dateDesc',
        'qt': '*'
    }
    return form_data

获取信息并保存:

def get_mes(con, page):
    response = requests.post(url=url,
                             params=params,
                             data=get_data(con, page),
                             headers=headers)
    res_dict = json.loads(response.content.decode(encoding='utf-8-sig'))
    # pprint.pprint(res_dict)
    res = res_dict['resultList']
    wb = openpyxl.load_workbook('税务局.xlsx', read_only=False)
    if con not in wb.sheetnames:      # 如果没有该表就会新建一个
        i = 1           # 用来实现行变
        sheet = wb.create_sheet(con)
        for data in res:
            dreTitle = data['dreTitle']          # 获取标题
            publishTime = data['publishTime']          # 获取发文日期
            documentNumber = data['customHs']['DOCNOVAL']           # 获取文号
            # print(dreTitle, publishTime, documentNumber)
            sheet.cell(row=i, column=1).value = dreTitle          # 将标题写入1行1列
            sheet.cell(row=i, column=2).value = publishTime         # 将发文日期写入1行2列
            sheet.cell(row=i, column=3).value = documentNumber           # 将文号写入1行3列
            i += 1           # 行号加一
            wb.save('税务局.xlsx')
    else:        # 如果表已经存在就接下去追加数据
        # pass
        i = (11 * (page - 1))          # 因为每一页有10条数据,所以如果是第二页那么就要从11行开始写入,以此类推
        table = wb.get_sheet_by_name(con)
        # print(table.title)
        for data in res:        # 接下来的代码其实是重复的,如果觉得累赘,可以写成方法以加强代码的复用性
            dreTitle = data['dreTitle']        
            publishTime = data['publishTime']          
            documentNumber = data['customHs']['DOCNOVAL']         
            # print(dreTitle, publishTime, documentNumber)
            table.cell(row=i, column=1).value = dreTitle      # 将
            table.cell(row=i, column=2).value = publishTime
            table.cell(row=i, column=3).value = documentNumber
            i += 1
            wb.save('税务局.xlsx')

mian函数:

if __name__ == '__main__':
    wb = openpyxl.Workbook()    # 创建工作簿
    wb.save('税务局.xlsx')
    for page in range(1, 3):    # 爬取增值税的前两页
        get_mes('增值税', page)
        time.sleep(5)
        print("succeed")
    for page in range(1, 3):     # 爬取消费税的前两页
        get_mes('消费税', page)
        time.sleep(5)
        print("succeed")

在这里插入图片描述

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值