目标地址:http://www.chinatax.gov.cn/chinatax/n810346/n810825/index.html
-
采集
采集以下栏目:
增值税、消费税的前两页数据
每个栏目的:
标题、发文日期、文号 -
保存
将所有信息保存到税务局.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")