最近在看爬虫相关的东西,一方面是兴趣,另一方面也是借学习爬虫练习python的使用,推荐一个很好的入门教程:中国大学MOOC的《python网络爬虫与信息提取》,是由北京理工的副教授嵩天老师讲的,感觉讲的很清晰,课件也很详细。

学习爬虫,怎么也绕不开requests库和BeautifulSoup库,先说下BeautifulSoup库:

BeautifulSoup库通俗来说是【解析、遍历、维护“标签树”(例如html、xml等格式的数据对象)的功能库 】
一个简单的使用BeautifulSoup库的demo:

  1. # coding:utf-8
  2.  
  3. from bs4 import BeautifulSoup
  4. import requests
  5.  
  6. url = 'http://python123.io/ws/demo.html'
  7. r = requests.get(url)
  8. demo = r.text # 服务器返回响应
  9.  
  10. soup = BeautifulSoup(demo, "html.parser")
  11. """
  12. demo 表示被解析的html格式的内容
  13. html.parser表示解析用的解析器
  14. """
  15. print(soup) # 输出响应的html对象
  16. print(soup.prettify()) # 使用prettify()格式化显示输出

得到一个BeautifulSoup对象后,一般通过BeautifulSoup类的基本元素来提取html中的内容

2.提取html中的信息

demo中的html内容如下:

(1)

  1. print(soup.title) # 获取html的title标签的信息
  2. print(soup.a) # 获取html的a标签的信息(soup.a默认获取第一个a标签,想获取全部就用for循环去遍历)
  3. print(soup.a.name) # 获取a标签的名字
  4. print(soup.a.parent.name) # a标签的父标签(上一级标签)的名字
  5. print(soup.a.parent.parent.name) # a标签的父标签的父标签的名字

(2)

  1. print('a标签类型是:', type(soup.a)) # 查看a标签的类型
  2. print('第一个a标签的属性是:', soup.a.attrs) # 获取a标签的所有属性(注意到格式是字典)
  3. print('a标签属性的类型是:', type(soup.a.attrs)) # 查看a标签属性的类型
  4. print('a标签的class属性是:', soup.a.attrs['class']) # 因为是字典,通过字典的方式获取a标签的class属性
  5. print('a标签的href属性是:', soup.a.attrs['href']) # 同样,通过字典的方式获取a标签的href属性

(3)

  1. print('第一个a标签的内容是:', soup.a.string) # a标签的非属性字符串信息,表示尖括号之间的那部分字符串
  2. print('a标签的非属性字符串的类型是:', type(soup.a.string)) # 查看标签string字符串的类型
  3. print('第一个p标签的内容是:', soup.p.string) # p标签的字符串信息(注意p标签中还有个b标签,但是打印string时并未打印b标签,说明string类型是可跨越多个标签层次)

介绍一下find_all()方法:

常用通过find_all()方法来查找标签元素:<>.find_all(name, attrs, recursive, string, **kwargs) ,返回一个列表类型,存储查找的结果

• name:对标签名称的检索字符串
• attrs:对标签属性值的检索字符串,可标注属性检索
• recursive:是否对子孙全部检索,默认True
• string:<>…</>中字符串区域的检索字符串

(1)

  1. print('所有a标签的内容:', soup.find_all('a')) # 使用find_all()方法通过标签名称查找a标签,返回的是一个列表类型
  2. print('a标签和b标签的内容:', soup.find_all(['a', 'b'])) # 把a标签和b标签作为一个列表传递,可以一次找到a标签和b标签

(2)

  1. for t in soup.find_all('a'): # for循环遍历所有a标签,并把返回列表中的内容赋给t
  2. print('t的值是:', t) # link得到的是标签对象
  3. print('t的类型是:', type(t))
  4. print('a标签中的href属性是:', t.get('href')) # 获取a标签中的url链接

(3)

  1. for i in soup.find_all(True): # 如果给出的标签名称是True,则找到所有标签
  2. print('标签名称:', i.name) # 打印标签名称

(4)

  1. print('href属性为http..的a标签元素是:', soup.find_all('a', href='http://www.icourse163.org/course/BIT-268001')) # 标注属性检索
  2. print('class属性为title的标签元素是:', soup.find_all(class_='title')) # 指定属性,查找class属性为title的标签元素,注意因为class是python的关键字,所以这里需要加个下划线'_'
  3. print('id属性为link1的标签元素是:', soup.find_all(id='link1')) # 查找id属性为link1的标签元素

(5)

  1. print(soup.head) # head标签
  2. print(soup.head.contents) # head标签的儿子标签,contents返回的是列表类型
  3. print(soup.body.contents) # body标签的儿子标签
  4. """对于一个标签的儿子节点,不仅包括标签节点,也包括字符串节点,比如返回结果中的 \n"""

(6)

  1. print(len(soup.body.contents)) # 获得body标签儿子节点的数量
  2. print(soup.body.contents[1]) # 通过列表索引获取第一个节点的内容

(7)

  1. print(type(soup.body.children)) # children返回的是一个迭代对象,只能通过for循环来使用,不能直接通过索引来读取其中的内容
  2. for i in soup.body.children: # 通过for循环遍历body标签的儿子节点
  3. print(i.name) # 打印节点的名字

python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法的更多相关文章

  1. PYTHON 爬虫笔记五:BeautifulSoup库基础用法

    知识点一:BeautifulSoup库详解及其基本使用方法 什么是BeautifulSoup 灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便实现网页信息的提取库. ...

  2. Python爬虫利器:BeautifulSoup库

    Beautiful Soup parses anything you give it, and does the tree traversal stuff for you. BeautifulSoup ...

  3. PYTHON 爬虫笔记七:Selenium库基础用法

    知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...

  4. PYTHON 爬虫笔记六:PyQuery库基础用法

    知识点一:PyQuery库详解及其基本使用 初始化 字符串初始化 html = ''' <div> <ul> <li class="item-0"&g ...

  5. Python爬虫学习:三、爬虫的基本操作流程

    本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...

  6. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  7. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  8. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

  9. python爬虫学习01--电子书爬取

    python爬虫学习01--电子书爬取 1.获取网页信息 import requests #导入requests库 ''' 获取网页信息 ''' if __name__ == '__main__': ...

随机推荐

  1. php ldap

    参考链接: http://blog.csdn.net/guoyuqi0554/article/details/11015403 http://blog.csdn.net/qk1992919/artic ...

  2. 超详细的Web前端开发规范文档

    规范目的为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进行前台页面开发. 本文档如有不对或者不合 ...

  3. Mybatis入门学习笔记

    1.定义别名 在sqlMapConfig.xml中,编写如下代码: <!-- 定义别名 --> <typeAliases> <!-- type: 需要映射的类型 alia ...

  4. shiro自定义realm支持MD5算法认证(六)

    1.1     散列算法 通常需要对密码 进行散列,常用的有md5.sha, 对md5密码,如果知道散列后的值可以通过穷举算法,得到md5密码对应的明文. 建议对md5进行散列时加salt(盐),进行 ...

  5. oracle建包,函数demo

    create table BOOK ( BOOK_ID NUMBER(10), BOOK_NAME VARCHAR2(10) ); create or replace package chen_pac ...

  6. oracle怎么给表和列加注释

    oracle添加注释的语法为: comment on column 字段名 is  '注释名' 举例: 创建表: CREATE TABLE t1{ id varchar2(32) primary ke ...

  7. cartographer 安装问题

    安装主要参考hitcm教程: http://www.cnblogs.com/hitcm/p/5939507.html 这里只说安装过程中遇到的问题, ceres-solver 与 eigen3 版本不 ...

  8. 函数前加static与不加static的区别

    1:加了static后表示该函数失去了全局可见性,只在该函数所在的文件作用域内可见 2:当函数声明为static以后,编译器在该目标编译单元内只含有该函数的入口地址,没有函数名,其它编译单元便不能通过 ...

  9. Windows Server2008各版本区别

    Windows Server 2008 是专为强化下一代网络.应用程序和 Web 服务的功能而设计,是有史以来最先进的 Windows Server 操作系统.拥有 Windows Server 20 ...

  10. 如何消除手机设置的字体大小对Cordova app(Android)界面font-size的影响

    ===================== 更新分割线 =================== 现在发现其实不需要用安卓编辑器打开,也能找到这个文件,路径是platforms\android\Cord ...