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

文章目录

        • 环境配置
        • 页面
        • 爬取流程
          • 税案通报爬取
          • 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
python">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
python">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作为字典保存。
python">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.niftyadmin.cn/n/5110121.html

相关文章

【MATLAB源码-第53期】m代码基于粒子群算法(PSO)的三维路径规划,显示最优路径和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 粒子群算法(Particle Swarm Optimization,简称PSO)是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述: 基本思想: 鸟群在寻找食物时,每只鸟都会…

Ettus USRP X410 配件讲解,如何选择对应的配件

Ettus USRP X410 产品图片 产品编号: 787272-01 附件 所需的附件 USRP电源线 可选附件 连接套件 SMA连接线 线缆 安装套件 通信电缆 风扇盒 汇总列表 名称编号价格Ettus USRP X410787272-01215,550.00USRP RIO电源线,中国785023-10165.00双百兆以太网PCIe接口…

hutool 工具类

hutool 工具类 hutool 依赖 引入 hutool 依赖包。 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.6</version> </dependency>StrUtil 常用方法&#xff1a; StrUtil.equals&…

操作系统【OS】线程与进程的比较

进程 线程 是什么的单位? 是资源分配的基本单位 是调度的基本单位 不能共享什么? 不能共享虚拟地址空间 不能共享栈指针 可以共享什么? 拥有一个完整的资源平台 每个进程都有独立的地址空间和资源 除了共享全局变量&#xff0c;不允许其他进程访问 某进程中的线程…

股票价格预测 | Python实现基于LSTM的股票预测模型(keras)

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 今儿举一个案例,围绕 LSTM(Long Short-Term Memory)神经网络的原理,展示如何使用Python和深度学习库Keras构建LSTM模型,以及如何使用这个模型来预测时间序列数据。 以股票价格预测为例,这是LSTM在金…

解码eBPF可观测性:eBPF如何改变我们所知的观测性

让我们来看看eBPF——这项技术到底是什么&#xff0c;它如何影响观测性&#xff0c;它与现有的观测性实践有什么区别&#xff0c;未来可能会发生什么变化&#xff1f; 在过去的两年里&#xff0c;云原生社区一直在热烈讨论eBPF。eBPF曾是KubeCon、eBPF Days和eBPF Summit的主题…

互联网医院|互联网医疗模式已从概念走向实体建设阶段

近年来&#xff0c;医疗服务领域新形态不断涌现&#xff0c;“互联网医疗”作为其中突出的一种&#xff0c;在挂号结算、远程诊疗、咨询服务等方面进行了不少探索&#xff0c;而早在2015年全国互联网医院成立&#xff0c;标志着“互联网医疗”模式已经从概念走向了实体建设阶段…

操作系统【OS】进程的通信

共享存储 各个进程对共享空间的访问应该是互斥的&#xff08;可以使用P、V操作&#xff09;低级通信 基于数据结构的共享速度慢、限制多高级通信 基于存储区的共享数据的形式、存放的位置由通信进程控制速度快 消息传递 进程间的数据交换以格式化的消息为单位 消息头&#…