• 任务描述

    • 行标签和单元格标签
    • find_all函数
    • 获取标签文本
  • 编程要求

任务描述

本关任务: 本关任务:根据上个步骤中爬取的表格标签,将表格中从第四行的单元格的文本显示出来

行标签和单元格标签

表格中每行的数据信息被封装在一个<tr></tr>之间的结构中。 每列内容采用<td></td>表示。 因此,如果要获得其中的数据,需要首先找到标签,并遍历其中每个标签,获取其值 例如,表格的第四行对应的html代码如下

find_all函数

通过BeautifulSoup的find_all(name)方法,可以找到多个标签,将多个标签的内容返回为一个列表 lb=bg.find_all("tr") 找到表格的所有tr标签,存入列表lb 若需要找每行下的所有td标签,则需要对lb循环,对每个元素执行find_all("td")

获取标签文本

在用find()方法找到特定的标签后,想获取里面的文本,可以用.text属性或者.string属性。 如果该标签下有多层次的子标签,则必须使用text属性。 对于该网页的td标签,如上图所示,需要用text才能返回文本。并且需要用strip去掉换行符。 如果使用最内层的span标签,则可以使用string属性。

编程要求

对于上述获得的表格标签的内容,爬取从第4行开始的文本, 显示每行的地区名称、总人口、城镇人口、乡村人口和城镇化率 各项之间用空格隔开,包括最后一列后面也有空格 每个地区换一行

# 这是一个请求库
import requests
# 将请求到的内容进行解析
from bs4 import BeautifulSoup
# 这是网址
url = "http://tjj.hunan.gov.cn/hntj/tjfx/tjgb/rkpc/
202105/t20210519_19079329.html"
# 调用请求库进行网页的请求,获取网页的内容
r=requests.get(url)
# 请求的时候防止乱码的发生,一般是utf-8还有一个是b123啥的,忘了,utf-8比较常见。
r.encoding = 'utf-8'
# 对获取到的内容进行解析,用的是text是获取其内容,至于html.parser
是BeautifulSoup的参数的用法,不加上会报错,详细知道BeautifulSoup请查阅相关信息。
soup=BeautifulSoup(r.text,"html.parser")
# 获取文本中的table标签的内容
bg=soup.find('table')
#代码开始
# 导入正则表达式的库
import re
# 在table中获取tr的内容
lb = bg.find_all('tr')# 定义两个列表,后面用于存储
a = []
b = []# 其实个人觉得下面的代码有点多余了,当时自己也是按照自己的想法去做的,就没有进行改了,
其实完全可以在lb的基础上进行lb=lb[3:]的操作,为什么会有这一步,因为题目要求是从长沙市开始的,
长沙市在第四行因此需要这么做,如果不太了解的同学可以自行查看lb的结构,就知道答案了。
for i in lb:a.append(i.find_all('td'))
a = a[3:]# 这两句是本人的简单测试,可忽视
# print(len(a[0]))
# print(a[0][0])'''
核心代码讲解部分:for k, i in enumerate(a):
在这条语句中,k会记住坐标,而i会记住对应的内容,就好像['i lov you','but you do not love me']
;在这个列表中,k分别取值为0,1;i就会分别对应那两句英文;的确,你真的不喜欢我,哈哈哈。result = re.match(r'.*宋体">(.*?)<',str(j),re.S)
在这条语句中,是使用的正则表达式;re.match(1,2,3);在1的位置为正则表达式提取的要求,
2的位置是匹配的句子,3为满足.*?不能进行换行而存在的需求;注意.*?和.*的用法,
一个是非贪婪匹配一个是贪婪匹配,详解可以去查一下资料。在这里面会返回()中的内容;
如果要提取的要求很多的话,就要多个括号,group(1)是返回第一个括号,
注意这里是从1开始的,而不是0.
'''
for k,i in enumerate(a):b.append([])for j in i:result = re.match(r'.*宋体">(.*?)<', str(j),re.S)b[k].append(result.group(1))# 对b中的内容进行提取,其实只是为了满足题目要求罢了,否则完全可以进行pd.DataFrame操作,
直接转为我们要的csv或者excel文件了
for i in b:for j in i:print(j,end=' ')print()#代码结束

期间遇到的错误:

在re.match中报错:

'NoneType' object has no attribute 'group'

运行直接报错,也就是说正则表达式没有匹配到这个字符串,返回结果为None,而我们又调用了group()方法导致了AttributeError。为什么加入一个换行符就匹配不到了,是因为.*?遇到换行符就无法匹配了,因此在这里我们需要加上一个re.S,这个修饰符的作用是使.匹配包括换行符在内的所有字符,re.S在网页匹配中经常用到,因为HTML节点经常会换行,加上它,就可以匹配节点之间的换行l.

第2关:爬取表格中指定单元格的信息相关推荐

  1. 如何给el-table表格的指定单元格设置颜色

    一.需求及效果图 最近的项目中,遇到给表格中指定单元格设置字体颜色,使用的是el-table做的,控制单元格字体颜色,每一行的最大值设置成绿色,最小值设置成红色,效果如下: 二.方法及代码 使用的是控 ...

  2. html如何取单元格内容,JS获取表格内指定单元格html内容的方法

    JS获取表格内指定单元格html内容的方法 本文实例讲述了JS获取表格内指定单元格html内容的方法.分享给大家供大家参考.具体如下: 下面的代码先通过表格对象的rows获得指定的行的所有单元格数组, ...

  3. html 鼠标单击单元格,vue-easytable点击表格中某个单元格操作

    一:vue-easytable的地址 http://doc.huangsw.com/vue-easytable/app.html#/table/hideTable 二:改变当前鼠标悬浮单元格的样式 1 ...

  4. 计算机基础知识教程excel单元格拆分,电脑内怎么将excel表格中某个单元格的内容拆分至不同单元格里...

    电脑内怎么将excel表格中某个单元格的内容拆分至不同单元格里 当我们在使用电脑的时候,可以下载excel软件来处理数据文件,那么如果想要将一个单元格中的内容拆分到不同的单元格中的话,应如何操作呢?接 ...

  5. PyQT5 (四十三) 在 QTableWidget 表格中设置单元格的字体和颜色 的案例

    在 QTableWidget 表格中设置单元格的字体和颜色 的案例 import sysfrom PyQt5 import QtPrintSupport, QtGui from PyQt5.QtCor ...

  6. java拆分excel_Java 合并和拆分Word表格中的单元格

    我们使用Word文档时,往往要对直接创建的表格进行编辑,如对表格的单元格进行合并和拆分,才能满足我们的工作需求.本文将介绍如何使用Free Spire.Doc for Java来合并以及拆分Word表 ...

  7. 如何合并Google表格中的单元格

    Merging cells in Google Sheets is a great way to keep your spreadsheet well-organized and easy to un ...

  8. html单元格颜色填充颜色,PPT表格中的单元格怎么填充颜色

    PPT表格中的单元格怎么填充颜色 2020-04-10 13:13 责任编辑:砕月 导读 / ppt插入的单元格想要设置颜色,该怎么填充颜色呢?下面我们就来看看ppt单元格上色的教程.更多下载请点击p ...

  9. python爬虫笔记一:爬取豆瓣中指定的明星所有图片

    从这个网址学习的:https://www.bilibili.com/read/cv10367703/ ------------------------------------------------- ...

最新文章

  1. SWFTools PDF转换为SWF
  2. python里的tplt什么意思 Python的format格式化输出
  3. Array.prototype.reduce 的理解与实现
  4. Event Recommendation Engine Challenge(基础版)---代码
  5. 如何为Swift进行宏定义
  6. 20 周年特别策划 | 说出你与 CSDN 的故事!
  7. unity 2d文字跟随主角移动_时间回溯——用Unity实现时空幻境(Braid)中的控制时间效果...
  8. python的metaclass分析
  9. ASP入门(一)环境的搭建
  10. maya! board_教你玩转MAYA的四十二精华造诣(第二期)
  11. php 图片上加文字,PHP语言之给图片添加文字(支持中文)//PHP函数
  12. KVM虚拟机,使用linux bridge配置vlan隔离
  13. 头条python后台一面凉经
  14. 超声扩散波复合成像仿真(ultrasound diverg_wave compound imaging simulation)
  15. QTableWidgetQTableView表格美化
  16. 论文总结-交通预测(未完成)
  17. 人工智能入门第一课:手写字体识别及可视化项目(手写画板)(mnist)
  18. STM32的USB例程JoyStickMouse代码分析
  19. 《深度学习之TensorFlow》reading notes(3)—— MNIST手写数字识别之二
  20. 【从零建站3/n】错题集(已解决):服务器上再次进入有Echarts的页面,图表无法显示

热门文章

  1. 为什么要用malloc申请空间
  2. (二)买基金的成本知识
  3. 菜鸡爬虫入门——爬取图片
  4. 什么是X.509证书?X.509证书工作原理及应用?
  5. 符号及符号表是什么?
  6. 土地利用转移矩阵分析与制图(以沮漳河流域为例)
  7. java计算机毕业设计病人跟踪治疗信息管理系统演示2021源码+数据库+系统+lw文档+部署
  8. 清除 thinkphp跟php的 X-Powered-By
  9. HDMI接口ESD设计及硬件布线注意事项
  10. 使用python从概率角度绘制植物叶子!