前几天,因为学校的通信感知实习需要作者利用一些边缘设备像传感器来获取土壤的相关数据,奈何作者家境贫寒,买不起传感器,所以说打算去到中国土壤数据库上面去爬取一些数据下来(白嫖真爽)

1.分析网页的结构

要设计一个网络爬虫程序设计,首先要分析网页的代码结构。

打开要获取数据信息的网站:

**网页:**http://vdb3.soil.csdb.cn

这里我们选择福建省作为要爬取数据的对象

选择漳州市

随便点击一个土种信息,这里我点击了青底灰泥田

点击查看,进入到最终的网页

我们只需要获取这些数据就可以了

PS:数据有些是空的,我们爬取下来后需要改成null字样,不能让它空着

我们这时候看下网站的域名:

网站域名

可以看到后面跟了参数:id = 10503

打开网页的代码查看器(按下F12键),则可以看到当前页面的代码结构,如下图

可以看到,标题存放在<div>中,而标题所对应的数据也存放在<div>中。只不过这两个标签它们的属性不一样。

2.获取数据

根据页面的代码结构分析,我们知道只要找到 <div>标签,就能获得相对应的数据

首先我们利用 requests 来获取网页内容

其中:

  • kw是来存放我们的 URL 参数的,我们手动输入的参数会添加到URL后面,这样就能实现随便爬取任何一个地方一个土种的数据信息了
  • 设置模拟浏览器和时间间隔为5s,用来防止目标服务器的反爬虫机制
def get_pages(url):kw = {}args = str(input("请输入要查询的参数:"))kw["id"] = argsheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}response = requests.get(url=url, params=kw, headers=headers, timeout=5)content = response.textreturn content

将获取到的内容进行解析

这部分比较长,因为我们还要将获取到的数据进行二次加工:

  • 将爬取到的数据进行有目的的选择,挑选出我们需要的数据:只需要:土地利用、有机质、全氮、全磷、全钾这几个标题
  • 如果标题的数据值为空,则显示 null 字样。

def parse_content(contents):soup = bs4.BeautifulSoup(contents, "lxml")# 获取 土地利用, 有机质(%), 全氮(%), 全磷(%),全钾(%)title_col_list = soup.find_all('div', class_="titlecol")list1 = []list2 = []for info in title_col_list:list1.append(info.text.strip())list1 = list1[-7:]list2.append(list1[0])list2.extend(list1[-4:])# 将‘土地利用, 有机质(%), 全氮(%), 全磷(%),全钾(%)’信息列表赋值info_list = list2# 获取 对应的详细数据data_col_list = soup.find_all('div', class_="datacol")list3 = []list4 = []for data in data_col_list:list3.append(data.text.strip())list3 = list3[-7:]del list3[1:3]for i in list3:if i == '':# 将空格元素修改为nullindex = list3.index(i)list3[index] = 'null'data_list = list3# 返回两个列表return info_list, data_list

将获取的数据进行归并

合并成一个字典

def download_data(url):contents = get_pages(url)info_list, data_list = parse_content(contents)# 将两个列表合并为一个字典,用zip方法dic1 = {}dic1 = dict(zip(info_list, data_list))return dic1

结果

最后,我们来看一下结果如何

可以看到,我们要爬取的这一当前页面参数为id = 10013

其中相关数据为

结果如下:

3.源代码

最后,附上源代码:

# -*- conding=utf-8 -*-
import requests
import bs4def get_pages(url):kw = {}args = str(input("请输入要查询的参数:"))kw["id"] = argsheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}response = requests.get(url=url, params=kw, headers=headers, timeout=5)content = response.textreturn contentdef parse_content(contents):soup = bs4.BeautifulSoup(contents, "lxml")# 获取 土地利用, 有机质(%), 全氮(%), 全磷(%),全钾(%)title_col_list = soup.find_all('div', class_="titlecol")list1 = []list2 = []for info in title_col_list:list1.append(info.text.strip())list1 = list1[-7:]list2.append(list1[0])list2.extend(list1[-4:])# 将‘土地利用, 有机质(%), 全氮(%), 全磷(%),全钾(%)’信息列表赋值info_list = list2# 获取 对应的详细数据data_col_list = soup.find_all('div', class_="datacol")list3 = []list4 = []for data in data_col_list:list3.append(data.text.strip())list3 = list3[-7:]del list3[1:3]for i in list3:if i == '':# 将空格元素修改为nullindex = list3.index(i)list3[index] = 'null'data_list = list3# 返回两个列表return info_list, data_listdef download_data(url):contents = get_pages(url)info_list, data_list = parse_content(contents)# 将两个列表合并为一个字典,用zip方法dic1 = {}dic1 = dict(zip(info_list, data_list))return dic1if __name__ == "__main__":url = '''vdb3.soil.csdb.cn/front/detail-%E5%85%A8%E5%9B%BD%E7%AC%AC%E4%BA%8C%E6%AC%A1%E5%9C%9F%E5%A3%A4%E6%99%AE%E6%9F%A5%E5%86%9C%E7%94%B0%E8%82%A5%E5%8A%9B%E6%95%B0%E6%8D%AE%E5%BA%93$fer_second_nutrient?'''print("------------------------开始爬取数据-----------------------------------------")dict1 = download_data(url)print("数据为:\n", dict1)print("\n------------------------爬取数据完毕!----------------------------------")

Python爬虫实战(2) 爬取中国土壤数据库部分数据相关推荐

  1. Python爬虫实战 | (12) 爬取万方数据库文献摘要并存入MongoDB

    之前在Python爬虫实战(7)中曾爬取过万方,本篇博客的爬取解析过程和之前几乎完全一样,不同的是数据存储方式,之前是存储到文件中(csv,txt,json,excel等),这次我们将提取的论文信息存 ...

  2. Python爬虫实战 | (7) 爬取万方数据库文献摘要

    在本篇博客中,我们将爬取万方数据库,首先我们打开万方首页http://www.wanfangdata.com.cn: 在搜索框中输入关键词,选择期刊.学位或会议,点击搜论文,并可得到与关键词相关的期刊 ...

  3. python爬虫实战之爬取中国农药网

    前言:这算是和研究生老师第一次正式的进行项目,虽说开始的有点随便,但是第二战还是挺成功的!自己作为一个本科生,也很幸运可以跟着学点知识,随便帮自己学院的老师出点力.还记得第一次交接任务时是和陈瑞学长, ...

  4. Python爬虫实战:爬取福利彩票双色球中奖结果数据

    一.工程目录 二.python爬虫三步骤 2.1 获取数据 这里爬取数据使用request的库,使用get/post接口请求来做数据的获取即可. 数据获取一般有静态页面数据获取.动态数据获取.伪装请求 ...

  5. Python爬虫实战:爬取贝壳网二手房成交数据,将数据存入Excel。

    import requests import xlrd as xlrd from xlutils.copy import copy from lxml import etree def getData ...

  6. 携程ajax,Python爬虫实战之爬取携程评论

    一.分析数据源 这里的数据源是指html网页?还是Aajx异步.对于爬虫初学者来说,可能不知道怎么判断,这里辰哥也手把手过一遍. 提示:以下操作均不需要登录(当然登录也可以) 咱们先在浏览器里面搜索携 ...

  7. Python爬虫实战之爬取糗事百科段子

    Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...

  8. Python爬虫实战之爬取百度贴吧帖子

    Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...

  9. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  10. Python爬虫实战之爬取网站全部图片(一)

    Python爬虫实战之爬取网站全部图片(二) Python爬虫实战之通过ajax获得图片地址实现全站图片下载(三) 一.获得图片地址 和 图片名称 1.进入网址之后 按F12  打开开发人员工具点击e ...

最新文章

  1. 公安领域知识图谱不断升温 或成AI下一风口
  2. Systemd 笔记
  3. 天龙固件U盘更新_硅格T18D量产工具下载_硅格T18D量产工具官方版下载[u盘格式化]...
  4. 初等数论--原根--阶的计算
  5. Go语言接口(interface)简单应用
  6. php补充 扩展,php补充安装扩展支持
  7. python对象没有属性_Python-对象没有属性E
  8. 【Android】LMK 工作机制
  9. matlab线检测,车道线检测(matlab)
  10. CentOS 7 安装EOS 并启动钱包
  11. 项目实战第二十一讲:平台商品库
  12. kettle同步数据 (SAP hana到 Mysql)
  13. 塔防游戏制作教程(三)
  14. ffmpeg+mencoder环境搭建和视频处理总结(4m/1/99)
  15. 超详细的WMS仓储管理系统介绍——盘点篇
  16. ThreadPool线程池原理
  17. c语言程序设计策划书,C语言程序设计大赛策划书(陈雷)
  18. zuul灰度发布功能实现
  19. 三星java世界x108_我对三星X100/X108的使用感受
  20. Python3操作MongoDB数据库

热门文章

  1. FreeRADIUS服务器搭建及配置
  2. 如何测试视频播放器?
  3. Android模拟滑块验证,[Android实例] 拖动滑块进行图片拼合验证方式的实现
  4. pycharm的安装及破解
  5. python pdf转word并保持原有的格式_将PDF转换为Word文档后,格式即可解决问题
  6. 数学建模之常见的优化模型
  7. mschart控件_使用MSChart控件绘制图表。
  8. # 研究杂感 × VOSviewer(第三辑)
  9. 如何用matlab画圆的图像,matlab在图像上画圆
  10. 天联服务器虚拟网卡未启动,天联未检测到虚拟网卡