37-python中bs4获取的标签中如何提取子标签
如果只是要提取一个标签 里面的属性值啥的,直接看这篇文章就可以了:
23-python用BeautifulSoup用抓取a标签内所有数据
如果是标签的嵌套,可以参考下面的思路,虽然不是很简洁,但是可以解决你的问题:

可以看到不能直接 findAll 所有的 tr 标签,否则会有许多杂质的, 所以,可以知道 table, 根据id 或者class, 则可以唯一找到;
下面的重点就是如何分析出我们想要的数据,如何提取出 每个 tr 包含的一行数据呢?
我的思路是:
findALL---table => 得到一个list只包含一个table,也就是我要的table
将这个table 在用一次 findall 然后:
findAll --- tr ==> 得到一个list, 包含每一个<tr>....</tr>; 好,我们已经得到我们要的每一行数据了
如何提取每一个数据呢:两种方法:
第一种是 考虑遍历每个<tr>, 利用findALL函数找 td, 读取td的string
第二种是考虑遍历每个<tr>, 利用findALL函数找到每个td, 用replace 替换掉 <td>,<\td>
代码如下:
# -*- coding:utf-8 -*-
# python 2.7
# XiaoDeng
# http://tieba.baidu.com/p/2460150866
# 标签操作 from bs4 import BeautifulSoup
import urllib.request
import re # 如果是网址,可以用这个办法来读取网页
# html_doc = "http://tieba.baidu.com/p/2460150866"
# req = urllib.request.Request(html_doc)
# webpage = urllib.request.urlopen(req)
# html = webpage.read() html = """
<table class="GridViewStyle" cellspacing="0" rules="all" border="1" id="ctl00_MainContentPlaceHolder_GridScore">
<caption>
(共49条/1页)
</caption>
<tr class="HeaderStyle">
<th scope="col">学年</th><th scope="col">学期</th><th scope="col">课程名称</th><th scope="col">课程学分</th><th scope="col">考试类型</th><th scope="col">考试成绩</th><th scope="col">所获学分</th><th scope="col">考试成绩3</th>
</tr>
<tr>
<td>2016</td><td>3</td><td>高等数学Ⅰ(一)</td><td>5.5</td><td>正常</td><td>67</td><td>5.5</td><td>107356</td>
</tr>
<tr>
<td>2017</td><td>1</td><td>高等数学Ⅰ(二)</td><td>5.5</td><td>正常</td><td>65</td><td>5.5</td><td>111481</td>
</tr>
</table>
</div>
"""
bs = BeautifulSoup(html, 'lxml')
score = bs.findAll('table', attrs={"id": 'ctl00_MainContentPlaceHolder_GridScore'})
bs2 = score[0] #提取出唯一一项,注意它依然是'lxml'格式,不需要重新beautifulSoup,注意它不是字符串!!!
score = bs2.findAll('tr') #找到每一个行
for i in score:
rt = i.findAll('td') #找到每一列
# print(rt)
if len(rt) == 0:
continue
## 一种方法:
for j in rt:
# print('j: ', j)
sj = str(j)
sj = sj.replace("<td>", '')
sj = sj.replace('</td>', '')
print(sj)
## 另一种方法:
for j in rt:
print(j.string)
print('=============================')
37-python中bs4获取的标签中如何提取子标签的更多相关文章
- python raw String 获取字符串变量中的反斜杠
常用的获取raw string的方式为: >>>r'\n' \n 不能用在字符串变量中,获取字符串变量中的反斜杠如下: tab = '\n' >>>tab.enco ...
- java web中如何获取spring容器中定义的bean----WebApplicationContext的使用
本文简单编写一个servlet来获取spring容器中管理的<bean id="dateBean" class="java.util.Date" sin ...
- Java项目和maven项目中如何获取&设置配置文件中的属性
通常情况下,我们会在一些配置文件文件中配置一些属性.如: indexPath = E\:\\Tomcat_7.0\\webapps\\ipost_stage\\lucene\\index imgUpl ...
- Spring <context:component-scan>标签属性 use-default-filters 以及子标签 include-filter使用说明
Spring <context:component-scan>标签作用有很多,最基本就是 开启包扫描,可以使用@Component.@Service.@Component等注解: 今天要作 ...
- jquery 中$.post获取MVC Controller中JsonResult返回包含LIst<Model>类型的子List<Model>的高级使用方法
比如JsonResult中返回return Json(models);的models结构如下: models返回含有四个集合的序列,每个集合的序列中又包含一个子集合序列“Child”. 问题是如果我们 ...
- Java中如何获取一个类中泛型的实际类型
本文链接:https://blog.csdn.net/kuuumo/article/details/83021158 _______________________________________ ...
- 【Java基础】Java中如何获取一个类中泛型的实际类型
泛型的术语 <>: 念做typeof List<E>: E称为类型参数变量 ArrayList<Integer>: Integer称为实际类型参数 ArrayLis ...
- Asp.Net中的获取Web.config中设置的参数!(前后台的代码示例)
一.Web.config中设置代码 <appSettings> <add key="deleted" value="1" ...
- iOS中如何获取image.xcassets中的启动图片
/** * 获取启动图片 */ +(UIImage *)launchImage{ NSString *imageName=@"LaunchImage-700"; if(iphon ...
随机推荐
- BZOJ3293: [Cqoi2011]分金币(数学)
3293: [Cqoi2011]分金币 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1596 Solved: 969[Submit][Status ...
- Linux之screen命令详解
一.nohup 工作中经常会遇到这样的需求,通过SecureCRT或其它工具远程到服务器执行某个任务,而这个任务耗时又比较长,你又不得不等待它执行完毕,但是如果此间如果关掉窗口或断开连接又会导致任务被 ...
- ElasticSearch(二):windows下ElasticSearch6.3.2插件Head的安装
前言 上一篇我们记录了如何安装ElasticSearch,这一篇我们来记录下如何安装Head插件 正文 方法总计有三种,但是安装ElasticSearch6.x的时候,只有一种完成了. 第一种:直接使 ...
- 博客网站-Hexo+GitHub+Netlify
Hexo+GitHub+Netlify一站式搭建属于自己的博客网站 https://www.cnblogs.com/kerbside/p/10130606.html https://hhongwen. ...
- 2018-2019-1 20165212 《信息安全系统设计基础》第八周学习总结(pwd)
2018-2019-1 20165212 <信息安全系统设计基础>第八周学习总结 一.知识点总结 1.三种并发方式 构造并发程序的方法有三种: 进程 线程 I/O多路复用 进程:用内核来调 ...
- (转)关于fflush(stdin)清空输入缓存流(C/C++)
来源:http://my.oschina.net/deanzhao/blog/79790 1. 为什么 fflush(stdin) 是错的?首先请看以下程序: #include <stdio.h ...
- Python ---- list和dict遍历
refer to: http://www.cnblogs.com/icejoywoo/p/3531869.html 对于python3, 可能有不一样之处, refer to: http://do ...
- hadoop深入研究:(十三)——序列化框架
hadoop深入研究:(十三)--序列化框架 Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495) 框 ...
- 【nodeJS】webstorm中设置nodej智能提示
- mac下搭建appium记录
要安装的东西: jdk(要配置环境) , sdk(要配置环境) ,node(要配置环境), python(要配置环境) ,appium(要配置环境),appium-python-client ,xco ...