python requests爬取税务总局税案通报、税务新闻和政策解读

news2024/10/6 14:29:35

文章目录

        • 环境配置
        • 页面
        • 爬取流程
          • 税案通报爬取
          • code
          • 税务新闻爬取
          • 政策解读爬取

环境配置

python:3.7
requests:发出请求,返回页面
beautifulsoup:解析页面
time:及时
warnings:忽视警告

页面

网址:https://www.chinatax.gov.cn/n810346/n3504626/n3504648/index.html
在这里插入图片描述
本文的需求在于爬取“新闻发布”和“政策法规”下的页面
具体页面结构为

  • 首页——新闻发布——税案通报
  • 首页——新闻发布——税务新闻
  • 首页——政策法规——政策解读
爬取流程
税案通报爬取

目标网址:https://www.chinatax.gov.cn/chinatax/n810219/c102025/common_listwyc.html

  • 分析网页页面
    属于典型的两段式爬取,每个页面有20篇文件,一共38页,分析页面url发现规律之后,只需要改变page={i},通过i的变化获取总url
  • 在网页源代码中发现每篇文件单独的url都可以获取,任务相对比较简单。
    在这里插入图片描述
  • 编写代码获取每篇文件的url,之后提取文字内容即可。
code
import requests
import warnings 
import time
from bs4 import BeautifulSoup
warnings.filterwarnings("ignore")

def get_page(page):
    url = f"https://www.chinatax.gov.cn/chinatax/manuscriptList/n810724?_isAgg=0&_pageSize=20&_template=index&_channelName=%E7%A8%8E%E5%8A%A1%E6%96%B0%E9%97%BB&_keyWH=wenhao&page={page}"
    try:  
        res = requests.get(url,verify = False)
    except:
        print(url)
    
    time.sleep(2)
    soup=BeautifulSoup(res.text,'html.parser')   #BeautifulSoup中的方法
    #print(soup.find_all(name='div',attrs={"class":"title"})) #按照字典的形式给attrs参数赋值

    links = []
    for link in soup.find_all('a'):      #遍历网页中所有的超链接(a标签)
        href = link.get('href')    #  打印出所有包含href的元素的链接。'''
        if "http://www.chinatax.gov.cn/chinatax/n810219/n810724/c" in href:
            links.append(href)

    print(links)
    return links
for page in range(151,165):
    links = get_page(page)
    for id,li in enumerate(links):
        try:
            res = requests.get(li,verify = False)
            time.sleep(1)

            res.encoding = res.apparent_encoding

            soup=BeautifulSoup(res.text,'html.parser')   #BeautifulSoup中的方法
            title = soup.title.text.strip('\r\n  ')
            print(title)

            with open(title +'.txt','w',encoding='utf-8') as f:
                for link in soup.find_all('p'):
                    f.write(link.get_text()+'\n')
        except:
            print(li)
税务新闻爬取

目标网址:https://www.chinatax.gov.cn/chinatax/n810219/n810724/common_list_swxw.html

  • 分析网页页面
    属于典型的两段式爬取,每个页面有20篇文件,一共167页,分析页面url发现规律之后,只需要改变page={i},通过i的变化获取总url

  • 在网页源代码中发现每篇文件单独的url都可以获取,任务相对比较简单。

  • 编写代码获取每篇文件的url,之后提取文字内容即可。和税案通报的爬取方式类似,更改初始url即可。

  • 爬取结果
    共爬取3188篇税务新闻文件,604篇税案通报文件。

在这里插入图片描述

政策解读爬取

目标网址:https://fgk.chinatax.gov.cn/zcfgk/c100015/list_zcjd.html

  • 分析网页页面
    属于典型的两段式爬取,每个页面有10篇文件,一共57页,分析页面url发现规律之后,只需要改变page={i},通过i的变化获取总url

  • 在网页源代码中发现无法观察到每篇文件单独的url
    在这里插入图片描述

  • 右键点击“检查”进入开发者模式,继续点击 Network——Fetch/XHR,之后刷新页面,发现右下角区域出现新文件,进行点击。
    在这里插入图片描述

  • headers是页面基本信息,包括Request URLRequest Method、Status Code等等。
    Previewjson格式的页面信息,ResponseHTML格式的页面信息,可以发现单独文件的url在这里面都可以发现。
    在这里插入图片描述

  • 通过Request URL请求网页信息,获取单独的文件url。

    1. 将请求通过json形式进行解析,可以获取文件网址url、标题title、内容content等许多信息。
    2. 但直接提取content发现内容显示不全,因此还是需要两段式继续提取具体的文件信息。
    3. urlcontent作为字典保存。
import requests
import warnings 
import time
from bs4 import BeautifulSoup
warnings.filterwarnings("ignore")

def get_page(page):
    url = f"https://www.chinatax.gov.cn/search5/search/s?siteCode=bm29000002&searchWord=&type=1&xxgkResolveType=%E6%96%87%E5%AD%97&pageNum={page}&pageSize=10&cwrqStart=&cwrqEnd=&column=%E6%94%BF%E7%AD%96%E8%A7%A3%E8%AF%BB&likeDoc=0&wordPlace=0&videoreSolveType="

    res = requests.get(url,verify = False)
    res.encoding = res.apparent_encoding

    time.sleep(1)
    dic = {}
    for i in range(len(res.json()["searchResultAll"]["searchTotal"])):
        url = res.json()["searchResultAll"]["searchTotal"][i]["url"]   #,sort_keys=True, indent=4, separators=(',', ': '))
        title = res.json()["searchResultAll"]["searchTotal"][i]["title"]
        #title = title.encode("utf-8").decode("unicode_escape")
        #url = json.dumps(content)["url"]
        #title = content["title"].encode("utf-8").decode("unicode_escape")
        #content = content.encode("utf-8").decode("unicode_escape")
        dic[url] = title

    print(dic)
    return dic
  • 使用得到的url提取,分析新文件的文本内容的分布位置,使用find_all进行爬取,将title作为文件标题
for page in range(1,57):
    dic = get_page(page)
    for key in dic:
        print(dic[key])
        print()

        res = requests.get(key,verify = False)
        res.encoding = res.apparent_encoding

        time.sleep(1)

        soup=BeautifulSoup(res.text,'html.parser')   #BeautifulSoup中的方法

        title = dic[key]

        with open(title +'.txt','w',encoding='utf-8') as f:
            for link in soup.find_all('p',style=True):
                styles = link.get('style', '').split(';')  # 将style属性值拆分为一个列表  
                if ('display: none' not in styles) and ('display: inline-block' not in styles):
                        print(link.get_text())
                        f.write(link.get_text()+'\n')
  • 发现可以提取文件,但有很多空文件。查看网页源代码发现不同文件的文本内容分布方式不同。根据发现的新分布更新find_all函数内容,继续爬取。
for page in range(1,57):
    dic = get_page(page)
    for key in dic:
        print(dic[key])
        print()

    res = requests.get(key,verify = False)
    res.encoding = res.apparent_encoding

    time.sleep(1)

    soup=BeautifulSoup(res.text,'html.parser')   #BeautifulSoup中的方法

    title = dic[key]

    with open('test/'+title+'.txt','w',encoding='utf-8') as f:
        for link in soup.find_all('p', attrs={'class': None}):
            #styles = link.get('style', '').split(';')  # 将style属性值拆分为一个列表  
            #if ('display: none' not in styles) and ('display: inline-block' not in styles):
            print(link.get_text())
            f.write(link.get_text()+'\n')
  • 爬取结果
    共爬取558篇政策解读文件。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏d3dcompiler_43.dll缺失怎么修复,分享5个快速有效的修复方法

最近我遇到了一个特别棘手的问题:当我试图运行一款新的游戏时,我收到一个令人困惑的错误消息,提示“d3dcompiler_43.dll丢失”。这个问题给我的游戏生活带来了很大的困扰,因为我热爱的游戏突然之间变得无法游玩。在这篇文章中&…

Android屏幕刷新机制

基础知识 CPU运行在Android设备上的中央处理器(Central Processing Unit)是Android设备的核心组件之一,负责执行计算和控制设备的各种操作。 Android设备上的CPU通常采用ARM架构,如ARM Cortex-A系列处理器。这些处理器具有高性能…

C++ Primer笔记002:引用/指针/const

文章目录 1. 引用1.1 引用不是对象或变量1.2 引用必须初始化1.3 不能定义引用的引用1.4 引用类型要适配1.5 非const引用不能绑定字面值 2. 指针2.1 指针和引用的区别2.2 指针的指针2.3 类型一致2.4 指针的引用2.5 void 型指针 3. const3.1 const的基本作用3.2 对const变量的引用…

【VisualStudio 】VisualStudio2022 项目模板

引言 最近写项目已经形成的自己的套路:新建一个prism工程,添加主界面,配置界面,等,很多常用功能已经封装成项目进行复用。如果每次来了一个新的活,重新配置这些都是完全重复的工作(大概需要十几…

第三章 Python 机器学习入门之C4.5决策树算法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 番外 Python 机器学习入门之K近邻算法 番外 Python 机器学习入门之K-Means聚类算法 第三章 Python 机…

C++多态、虚函数、纯虚函数、抽象类

多态的概念 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 举个简单的例子:抢红包,我们每个人都只需要点击一下红包,就会抢到金额。有些人能…

Windows11突然VM虚拟机无法运行报错与 Device/Credential Guard 不兼容

windows11长时间没用vmware,突然使用时打开报一下错: 解决方案: 以管理员身份运行“Windows Powershell (管理员)”(Windows键X键),输入以下命令重启电脑。 bcdedit /set hypervisorlaunchtype off 注意&#xff1a…

有哪些专业的配音APP推荐?

作为当今社交媒体时代的一员,我们经常需要在各种场合中使用配音软件,无论是自制视频内容还是进行个人创作,一款好用且免费的配音软件显得很重要。今天给大家分享一款备受好评的免费配音软件,它不仅功能强大,而且操作简…

2023年【山东省安全员A证】考试内容及山东省安全员A证考试报名

题库来源:安全生产模拟考试一点通公众号小程序 山东省安全员A证考试内容是安全生产模拟考试一点通生成的,山东省安全员A证证模拟考试题库是根据山东省安全员A证最新版教材汇编出山东省安全员A证仿真模拟考试。2023年【山东省安全员A证】考试内容及山东省…

MS17010(永恒之蓝)漏洞实战

曾因苦难多壮志,不教红尘惑坚心。 工具检测 实战过程 使用搜索命令,搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例,show options 看一下配置 设置网段,run运行就行了 使用攻…

leetcode 310 最小高度树

树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的树,标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表(每一个边都是一对…

代码随想录算法训练营第二十九天 | 回溯算法总结

​ 代码随想录算法训练营第二十九天 | 回溯算法总结 1. 组合问题 1.1 组合问题 在77. 组合中,我们开始用回溯法解决第一道题目:组合问题。 回溯算法跟k层for循环同样是暴力解法,为什么用回溯呢?回溯法的魅力,用递…

excel常用的几个函数

1、MID函数 通常用来返回返回指定字符串中的子串。 函数公式: MID(string, starting_at, extract_length) String(必填):包含要提取字符的文本字符串 starting_at(必填):文本中要提取的第一个字…

Tomcat及jdk安装下载及环境配置(超超超详解)

我是看了两篇博客安装配置好的 jdk 最详细jdk安装以及配置环境(保姆级教程)_安装jdk需要配置环境变量吗-CSDN博客 tomcat Tomcat的下载安装与配置及常见问题处理【Win11】 - 鞠雨童 - 博客园 (cnblogs.com) 本篇文章是我解决了很多朋友的tomcat配置问题总…

基于RIP的MGRE实验

题目及视图: 实验要求: 1.R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址 2.R1和R5间使用PPP的PAP认证,R5为主认证 R2与R5之间使用ppp的CHAP认证,R5为主认证方 R3与R5之间使用HDLC封装 3.R1…

【C++学习笔记】引用

1. 概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。 比如:孙悟空,有人叫弼马温,也有人称为齐天大圣。 1.1 使用方…

计算机毕业设计 基于SpringBoot智慧养老中心管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

粤嵌实训医疗项目--day01(Vue+SpringBoot)

目录 一、创建工作空间及配置Maven环境 二、创建springboot项目整合web操作 三、http请求参数获取及登录页面访问操作 四、数据库设计、数据库创建及导入sql 五、使用mybatis-plus逆向工程生成代码【vaccinum】 六、JavaEE三层架构概念及user查询实现 七、mybatis-plus逆…

安装与脏数据绕过_安全狗

1安全狗 1.1 环境准备 安全狗safedogwzApacheV3.5.exe,安装步骤省略, pikachu环境:https://zhuanlan.zhihu.com/p/568493971 安装注意事项:安装完后php和web服务都需要重启 注意事项:服务名php版本保持一致 安装过…