如果只是要提取一个标签 里面的属性值啥的,直接看这篇文章就可以了:

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获取的标签中如何提取子标签的更多相关文章

  1. python raw String 获取字符串变量中的反斜杠

    常用的获取raw string的方式为: >>>r'\n' \n 不能用在字符串变量中,获取字符串变量中的反斜杠如下: tab = '\n' >>>tab.enco ...

  2. java web中如何获取spring容器中定义的bean----WebApplicationContext的使用

    本文简单编写一个servlet来获取spring容器中管理的<bean  id="dateBean" class="java.util.Date" sin ...

  3. Java项目和maven项目中如何获取&设置配置文件中的属性

    通常情况下,我们会在一些配置文件文件中配置一些属性.如: indexPath = E\:\\Tomcat_7.0\\webapps\\ipost_stage\\lucene\\index imgUpl ...

  4. Spring <context:component-scan>标签属性 use-default-filters 以及子标签 include-filter使用说明

    Spring <context:component-scan>标签作用有很多,最基本就是 开启包扫描,可以使用@Component.@Service.@Component等注解: 今天要作 ...

  5. jquery 中$.post获取MVC Controller中JsonResult返回包含LIst<Model>类型的子List<Model>的高级使用方法

    比如JsonResult中返回return Json(models);的models结构如下: models返回含有四个集合的序列,每个集合的序列中又包含一个子集合序列“Child”. 问题是如果我们 ...

  6. Java中如何获取一个类中泛型的实际类型

    本文链接:https://blog.csdn.net/kuuumo/article/details/83021158   _______________________________________ ...

  7. 【Java基础】Java中如何获取一个类中泛型的实际类型

    泛型的术语 <>: 念做typeof List<E>: E称为类型参数变量 ArrayList<Integer>: Integer称为实际类型参数 ArrayLis ...

  8. Asp.Net中的获取Web.config中设置的参数!(前后台的代码示例)

    一.Web.config中设置代码     <appSettings>         <add key="deleted" value="1" ...

  9. iOS中如何获取image.xcassets中的启动图片

    /** *  获取启动图片 */ +(UIImage *)launchImage{ NSString *imageName=@"LaunchImage-700"; if(iphon ...

随机推荐

  1. 启动tornado项目,hello world

    新建一个env虚拟环境 mkvirtualenv toenv 在虚拟环境中安装tornado workon toenv pip install tornado 在D盘中新建tornado项目文件夹,就 ...

  2. BZOJ3270: 博物馆【概率DP】【高斯消元】

    Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...

  3. java并发之原子性、可见性、有序性

    链接:https://blog.csdn.net/gongpulin/article/details/51211616

  4. [C++ Primer] 第7章: 类

    定义抽象数据类型 定义在类内部的函数是隐式的inline函数. const成员函数 又叫做常量成员函数, 成员函数参数列表之后紧跟const关键字, const修饰的是类this指针. 默认情况下th ...

  5. sqlite性能优化

    1.数据库性能上 1.1 批量事务插入,提升数据插入的性能 由于sqlite默认每次插入都是事务,需要对文件进行读写,那么减少事务次数就能简书磁盘读写次数从而获得性能提升. 1.2 单条sql优于多条 ...

  6. bzoj 3059: 归途与征程

    Description 给出一个长度为N的由小写字母’a’~’z’和’*’组成的字符串A,一个长度为M的仅由小写字母’a’~’z’组成的字符串B.一个’*’可以匹配任意多个字符(包括0个).求在B的所 ...

  7. Linux操作系统多线程信号总结

    linux 多线程信号编程总结 linux 多线程信号总结(一) 1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函 ...

  8. 转转转![Spring MVC] - 500/404错误处理-SimpleMappingExceptionResolver

    参考博客: http://www.cnblogs.com/dongying/p/6129937.html http://www.cnblogs.com/rollenholt/archive/2012/ ...

  9. Java-Runoob-高级教程-实例-环境设置实例:4.Java 实例 – 如何查看当前 Java 运行的版本?

    ylbtech-Java-Runoob-高级教程-实例-环境设置实例:4.Java 实例 – 如何查看当前 Java 运行的版本? 1.返回顶部 1. Java 实例 - 如何查看当前 Java 运行 ...

  10. red ant

    Red Ant(红蚁)网络运维管理系统是IT运维管理系统,提供智能的B/S接口可视化人机界面,通过简单的操作实现全方位的网络专线.服务器.中间件.各种应 用程序.机房动力环境等监控管理,“化繁为简”, ...