【Web爬虫】爬⾍⿊⻰江省与四川省农机补贴以及数据分析

news/2024/4/30 3:35:28

目录

一、实验目的

二、实验内容

2.1 实验爬取数据选择

2.2python代码爬取数据

2.3数据处理与分析

三、实验原理

3.1 python 连接网页的两种方式

3.1.1 使用requests连接网页

3.1.2 使用from selenium import webdriver连接网页,创建网页测试

3.2 python 获取网页内容的两种方式

3.2.1 使用beautifulsoup获取标签间文本内容爬取

3.2.2 使用selenium模拟点击爬取网页

3.3 两种方式的优缺点分析

四、实验过程

4.1 爬取网页

4.2 数据量统计

4.3 处理数据

五、数据分析

5.1 地理可视化分析

5.2 同省不同年比较

5.3 同年不同省比较

5.3.1 2023年黑龙江和四川产品的单台中央补贴额(元)比较

5.4 同省单项数据分析

六、实验结果

6.1代码文件

6.2 数据文件

七、问题和解决方法

7.1 爬取不同年份的信息

7.2爬四川的数据显示xpath找不到

7.3网页不稳定

7.4 爬取内容格式有误


实验  爬虫黑龙江省与四川省农机补贴

以及数据分析

一、实验目的

  • 了解并熟悉爬虫过程
  • 了解数据分析
  • 学习并利用python和excel能够解决网页爬虫和数据分析问题

二、实验内容

2.1 实验爬取数据选择

1.选择网站(2022年全国各省市农机购置补贴系统登录入口-农机360网 (nongji360.com))黑龙江省和四川省农机购置补贴系统

图1:2022年全国各省市农机购置补贴系统登录入口界面

2.选择爬取两省三年表格内的全部数据

图2:黑龙江省农机购置补贴系统登录入口界面

图3:四川省农机购置补贴系统登录入口界面

2.2python代码爬取数据

爬取方式使用beautifulsoup和selenium两种方式爬取

详情见实验过程

2.3数据处理与分析

1.地理可视化分析

2.同省不同年比较

3.同年不同省比较

4.同省单项数据分析

详情见实验过程

三、实验原理

3.1 python 连接网页的两种方式

3.1.1 使用requests连接网页

  • 确定url,网址base_url = http://218.7.20.115:2021/pub/gongshi
  • 确定起始页current_page_index = 5721
  • 获取当前页的内容response = requests.get(f"{base_url}?pageIndex={current_page_index}")

3.1.2 使用from selenium import webdriver连接网页,创建网页测试

  • 实例化测试网页
    1. driver = webdriver.Edge()
  • 连接网页
    1. driver.get(f'http://202.61.89.161:12021/subsidyOpen')

3.2 python 获取网页内容的两种方式

3.2.1 使用beautifulsoup获取标签间文本内容爬取

1、导入模块:

from bs4 import beautifulsoup

2、选择解析器解析指定内容:

soup=beautifulsoup(解析内容,解析器)

常用解析器:html.parser,lxml,xml,html5lib

3、使用find\find_all方式

  • find_all( name , attrs , recursive , text , **kwargs )
    • 根据参数来找出对应的标签,但只返回第一个符合条件的结果。
  • find( name , attrs , recursive , text , **kwargs )
    • 根据参数来找出对应的标签,但只返回所有符合条件的结果。

筛选条件参数介绍:

  1. name:为标签名,根据标签名来筛选标签
  2. attrs:为属性,,根据属性键值对来筛选标签,赋值方式可以为:属性名=值,attrs={属性名:值}(但由于class是python关键字,需要使用class_)

分层获取表格行内容

  1. find("table") 获取表格
  2. find_all("tr") 获取每一行
  3. find_all("td") 获取行中列项,具体到一个单元格

图1:黑龙江省农机补贴系统元素示例

3.2.2 使用selenium模拟点击爬取网页

1.使用selenium中的webdriver连接测试网页

2.定位到高级搜素并点击

sous=driver.find_elment_by_xpath("//*[@id='app']/div/div[2]/div[2]/form/div/div/div[1]/div/div/div/div/span/span/i")

sous.click()
time.sleep(1)

图2:定位到高级搜素并点击

3.选取年份2021,2022,2023并点击

driver.find_element(By.XPATH, "/html/body/div[2]/div[1]/div[1]/ul/li[2]").click()
time.sleep(1)

3:选取年份2021,2022,2023并点击

4.点击查询

button = driver.find_element_by_xpath("//*[@id='app']/div/div[2]/div[2]/form/div/div/div[10]/button")
button.click()
time.sleep(1)

4:点击查询

5.点击下一页或先点击尾页再点击上一页,进行翻页操作

button = driver.find_element_by_xpath("//*[@id='app']/div/div[2]/div[3]/div[2]/div/div/button[2]").click()

3.3 两种方式的优缺点分析

Beautifulsoup: 

缺点:遇到选择不同年份,网址无改变,无法获取2021和2022年内容

优点:爬取速度快

Selenium:

缺点:爬取速度慢

优点:解决了beautifulsoup的缺点

四、实验过程

4.1 爬取网页

4.1.1第一种爬取方式:

  1. import csv
    import requests
    from bs4 import BeautifulSoupimport sys
    import io
    base_url = "http://218.7.20.115:2021/pub/gongshi"
    current_page_index = 5721# 创建CSV文件
    file_path = "C:/Users/prx17/anaconda3/scirapy/2023黑龙江农机补贴3.csv"
    with open(file_path, mode="w", newline="", encoding="utf-8") as file:writer = csv.writer(file)# 循环遍历页面while current_page_index<8340:# 获取当前页的内容response = requests.get(f"{base_url}?pageIndex={current_page_index}")response.encoding = 'utf-8'html_content = response.textsoup = BeautifulSoup(html_content, "html.parser")table = soup.find("table")rows = table.find_all("tr")# 写入每一行数据for row in rows[1:]:data = [cell.text for cell in row.find_all("td")]writer.writerow(data)#输出页数作为观察获取数据的情况的指标print(current_page_index)current_page_index += 1print(f"成功保存信息至文件:{file_path}")  

1:爬虫过程输出图

爬取结果:

2:爬虫结果csv图

4.1.2使用第二种方式进行爬虫       

 import requests
import csv
from bs4 import BeautifulSoup
# 发送HTTP请求获取网页内容
import requests
import csv
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import pandas as pd
import numpy as np
from selenium.webdriver.support.ui import Select
# 或者直接从select导入
# from selenium.webdriver.support.select import Select#打开
driver = webdriver.Edge()header={"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58"}
driver.get(f'http://202.61.89.161:12021/subsidyOpen')
time.sleep(1)
#s = driver.find_element_by_id('YearNum')#options_list = Select(s).options # 返回所有选项
#for option in options_list:#print(option.text) # 打印每个选项的文本值#Select(s).select_by_index(2)        # 选中索引值为2的选项(index从0开始)
#time.sleep(2)#Select(s).select_by_value('2022')     # 选中value值为49的选项:Fax
time.sleep(1)
#button2 = driver.find_element_by_xpath("//*[@id='app']/div/div[2]/div[3]/div[2]/div/div/ul/li[12]")
#button2.click()
#time.sleep(2)
#Select(s).select_by_visible_text('Mail') # 选中文本为Mail的选项
#创建dataframenum=1
#定位客户列表file_path = "C:/Users/prx17/anaconda3/scirapy/2023四川农机补贴1.csv"#print(df[-10:-1])
#time.sleep(2)
for i in range(4987):#print(i)for n in range(1,16):userslist = driver.find_elements_by_xpath(f"//*[@id='app']/div/div[2]/div[3]/div[1]/div[3]/table/tbody/tr[{n}]")#print(userslist)for user in userslist:data = user.text.split('\n')#print(data)#print(type(data))datas=[]datas.append(data)#print(datas)with open(file_path, mode="a",  newline="",encoding="utf-8") as file:writer = csv.writer(file)for m in datas:#n=m.split(' ')//*[@id="app"]/div/div[2]/div[3]/div[2]/div/div/button[2]#print(m)#data=[cell.text for cell in user.find_all("td")]writer.writerow(m)file.close()print(num)num += 1#if i<6:time.sleep(2)button = driver.find_element_by_xpath("//*[@id='app']/div/div[2]/div[3]/div[2]/div/div/button[2]")# else:# button2 = driver.find_element_by_xpath("//*[@id='pager']/div/a[14]")button.click()# print(df[-10:-1])time.sleep(2)print(f"成功保存信息至文件:{file_path}") 

爬取结果:

3:爬虫结果csv图

4.2 数据量统计

总共约82.8万条数据

4:爬虫数据量结果统计

4.3 处理数据

因为第一次爬虫时发现未删除换行符,导致数据中有换行符,不方便进行数据分析

图1:数据结果

后加上去除换行符得到解决

五、数据分析

5.1 地理可视化分析

1:黑龙江省前十一名补贴频率最高城市地图

从黑龙江省的地图来看,补贴高频城市前十一名主要集中在黑龙江省的西南部,在黑龙江省的西南部的原因有以下几个方面:

  1. 近江
  2. 温度比北部更高
  3. 东北平原地区有着肥沃的黑土地,黑龙江的西南地区就位于东北平原内,黑土地对农作物的生长有好作用

2:黑龙江省前十一名补贴频率最高城市地图

可以看出高频城市有:

  1. 海伦市
  2. 龙江县
  3. 北林区
  4. 铁力市
  5. 克山县
  6. 安达市、等

绿色颜色越深,补贴次数申请次数越多,变相显示使用农机的频率更高。

3:四川省前十一名补贴频率最高城市地图

从四川省的地图来看,补贴高频城市前十一名主要集中在四川省的东部,在黑龙江省的东部的原因有以下几个方面:

  1. 靠近长江
  2. 温度比西部高原草原地区更高
  3. 科技也比较发达

4:四川省前十一名补贴频率最高城市地图

可以看出高频城市有:

  1. 翠屏区
  2. 沪县
  3. 邻水县
  4. 安岳县
  5. 纳溪区
  6. 合江县
  7. 蓬安县

绿色颜色越深,补贴次数申请次数越多,变相显示使用农机的频率更高。

5.2 同省不同年比较

5:黑龙江省2021年前十一名补贴频率最高城市地图

   6:黑龙江省2023年前十一名补贴频率最高城市地图

图7:2021年黑龙江补贴高频城市图   

图8:2023年黑龙江补贴高频城市

由图可以看出,从2021到2023年,补贴频率前十一名城市波动较大,但总体还是集中在黑龙江省的西南部,并且,新兴五常市对农机补贴申请大大增加,可以分析出五常市对科技农业的重视开始上升。

图9:2021年四川补贴高频城市图     

 

 图10:2023年四川补贴高频城市

由图可以看出,四川省从2021到2023年,补贴频率前十一名城市略有波动,变化不大

图11:2021年四川的单台中央补贴额(元)的产品名称    图12:2023年四川的单台中央补贴额(元)的产品名称

四川各产品的单台中央补贴额(元)从2021年到2023年,高补贴额的产品变化大,2021年排名在前的轮式拖拉机变为后来2023年的微耕机,各种器具的使用变化很大,说明农机的产品使用变化比较大。

图13:2022年四川的的产品名称占数扇形图

图14:2023年四川的的产品名称占数扇形图

四川各产品的数量从2022年到2023年的变化来看,使用最多的还是微耕机,并且微耕机使用的频率越来越高了,从2022年的占全部的百分之二十五变化为2023年的占全部的百分之五十二,碾米机和饲料粉碎机的使用也变多了,但是细看饲料粉碎机的使用频率变化更大,比碾米机多百分之二,说明畜牧业的科技使用程度变高。

5.3 同年不同省比较

5.3.1 2023年黑龙江和四川产品的单台中央补贴额(元)比较

图15:2023年黑龙江的单台中央补贴额(元)的产品名称

图16:2023年四川的单台中央补贴额(元)的产品名称

黑龙江作为中国东北的代表,四川作为中国西南的代表,从常用农机上来看,使用差别很大,在黑龙江里面,单台中央补贴额高的有轮式拖拉机,水田平地搅浆机,全混日粮搅拌机,秸秆压捆机等,而对于四川省高的是微耕机,高速乘坐式水稻插秧机,批式循环谷物干燥机,采茶机等,可以看出来使用什么样的机器原因如下

  1. 农作物种类,南北差异大
  2. 地形差异大,使用农机不同,四川多为山区,而黑龙江西南地区在东北平原上

图17:黑龙江与四川三年补贴数比较折线图

从三年的补贴数的变化趋势上来看,四川省补贴数在2021年达到最高,后两年有有所下降,但都大于黑龙江省,黑龙江省的年补贴数连续三年都有上升趋势。

5.4 同省单项数据分析

图18:黑龙江购机日期频率折线图

从黑龙江省购机日期频率折线图来看,购机日期多集中在11,12月。

图19:黑龙江机具品目单台中央补贴额图

从黑龙江机具品目单台中央补贴额图来看,机具具有高单台中央补贴额的极具排名为

  1. 轮式拖拉机
  2. 喷杆喷雾机
  3. 搂草机
  4. 秸秆粉碎还田机
  5. 薯类收获机
  6. 根茎作物播种机

并且轮式拖拉机明显高于其他机器,其余都低于60万,而轮式拖拉机达到了110万以上

图20:黑龙江城市补贴数折线图

从黑龙江城市补贴数折线图来看,五常市排名最高,并且与其他市区有很大的差距,唯一达到10000以上的补贴数

图21:结算状态扇形图

从结算状态扇形图来看,财政部门已结算占大多数,第二位为农机部门已审核未提交财政部门,说明农机部门的审核很快,但有一大部分未提交给财政部门。

图22:黑龙江单台中央补贴额频率柱状图

从黑龙江单台中央补贴额频率柱状图来看,频率很分散。

图23:黑龙江购买数量频率柱状图

从黑龙江购买数量频率柱状图来看,购买数量全低于6,说明农机单次购买不集中。

图24:黑龙江单台销售价格的频率的柱状图

从黑龙江单台销售价格的频率的柱状图来看,低价农机的频率比较高,有价钱越高,农机越少的趋势。

图25:黑龙江单台中央补贴额(元)的柱状图

从黑龙江单台中央补贴额(元)的柱状图来看,低价的频率会更高。

图26:生产厂家受补贴数扇形图

从生产厂家受补贴数扇形图来看,前四大公司如图,各生产厂家的受补贴数差别不大。

六、实验结果

6.1代码文件

见提交版本中的main(爬取黑龙江2023年数据),scir1(爬取黑龙江2021,2022年数据),sichuan(爬取四川省2021,2022,2023年数据)

6.2 数据文件

黑龙江农机补贴.xlsx

四川农机补贴.xlsx

七、问题和解决方法

7.1 爬取不同年份的信息

遇到的问题:在使用requests连接网页,beautifulsoup方式爬取数据时,发现在爬取选择年份之后,网页的网址并没有发生改变,就无法爬取2021和2023年的数据

解决方法:使用selenium模拟用户点击来获取网页内容,就不用担心网址是否改变这个问题。

7.2爬四川的数据显示xpath找不到

原因时selenium版本太高,使用find_element(By.XPATH,path)得到解决

7.3网页不稳定

遇到的问题: 四川页面数据爬多了之后会总页数不稳定,比如从一万多页变成两百多页,造成代码运行中断。原因是网页服务器不稳定,未得到解决方法

7.4 爬取内容格式有误

原因:未去除换行符

使用 user.text.split('\n')得到解决

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

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

相关文章

HarmonyOS NEXT应用开发之@State装饰器:组件内状态

State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&#xff0c;使变量拥有状态属性的装饰器&a…

2024 年高效开发的 React 生态系统

要使用 React 制作应用程序&#xff0c;需要熟悉正确的库来添加您需要的功能。例如&#xff0c;要添加某个功能&#xff08;例如身份验证或样式&#xff09;&#xff0c;您需要找到一个好的第三方库来处理它。 在这份综合指南中&#xff0c;我将向您展示我建议您在 2024 年使用…

【JavaScript 漫游】【049】ES6 规范中对象的扩展

文章简介 本篇文章为【JavaScript 漫游】专栏的第 049 篇文章&#xff0c;对 ES6 规范中对象的扩展知识点进行了记录。具体包括&#xff1a; 属性的简洁表示法属性名表达式方法的 name 属性属性的可枚举性和遍历super 关键字对象的扩展运算符链判断运算符Null 判断运算符新增…

是否有替代U盘,可安全交换的医院文件摆渡方案?

医院内部网络存储着大量的敏感医疗数据&#xff0c;包括患者的个人信息、病历记录、诊断结果等。网络隔离可以有效防止未经授权的访问和数据泄露&#xff0c;确保这些敏感信息的安全。随着法律法规的不断完善&#xff0c;如《网络安全法》、《个人信息保护法》等&#xff0c;医…

Python 潮流周刊#44:Mojo 本周开源了;AI 学会生成音乐了

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯&#xff0c;…

[蓝桥杯 2014 省 A] 波动数列

容我菜菲说一句&#xff0c;全网前排题解都是rubbish&#xff0c;当然洛谷某些也是litter 不好意思&#xff0c;最近背单词背了很多垃圾的英文&#xff0c;正题开始 [蓝桥杯 2014 省 A] 波动数列 题目描述 输入格式 输入的第一行包含四个整数 n , s , a , b n,s,a,b n,s,a…