首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫beautifulsoup4系列2

python爬虫beautifulsoup4系列2

作者头像
上海-悠悠
发布2018-04-08 16:36:26
6340
发布2018-04-08 16:36:26
举报

前言

本篇详细介绍beautifulsoup4的功能,从最基础的开始讲起,让小伙伴们都能入门

一、读取HTML页面

1.先写一个简单的html页面,把以下内容copy出来,保存为html格式文件

<meta charset="UTF-8"> <!-- for HTML5 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html><head><title>yoyo ketang</title></head>
<body>
<b><!--Hey, this in comment!--></b>
<p class="title"><b>yoyoketang</b></p>
<p class="yoyo">这里是我的微信公众号:yoyoketang
<a href="http://www.cnblogs.com/yoyoketang/tag/fiddler/" class="sister" id="link1">fiddler</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/python/" class="sister" id="link2">python</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/selenium/" class="sister" id="link3">selenium</a>;
快来关注吧!</p>

<p class="story">...</p>

2.为了学习方便,可以把此html文件和脚本放同一文件夹下

3.用python的open函数读取这个html,如下图能正确打印出来,说明读取成功了

二、解析器:html.parser

1.用BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄

2.如果我们调用BeautifulSoup这个类的时候,不带"html.parser"参数,这时候会有个waring的,下图红色框框区域给出了建议。

3.html.parser这个是python库里面自带的解析器,无需安装。

4.prettify()这个方法是把文件解析成html格式,用html的标准格式输出(有缩进的)

三、对象的种类

1.Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

Tag : 标签对象,如:<p class="title"><b>yoyoketang</b></p>,这就是一个标签 NavigableString :字符对象,如:这里是我的微信公众号:yoyoketang BeautifulSoup :就是整个html对象 Comment :注释对象,如:!-- for HTML5 --,它其实就是一个特殊NavigableString

2.弄清楚了这四个对象,后面所有的操作但是基于这四个(其实最后面一个comment可以忽略,几乎用不到)

四、Tag对象

1.html里面识别一个tag,其实一般像这种:

<p class="title"><b>yoyoketang</b></p>

<b>yoyoketang</b>

<head><title>yoyo ketang</title></head>

以上这些都是tag,很明显都是以<xx 开头</xx> 结尾这种,就是一个完整的tag

2.通过标签的名称,来获取tag对象

3.如果有多个相同的标签名称,返回的是第一个

五、Tag对象:name属性

1.tag的name属性,每一个tag都有name属性,用.name获取,如上面的三个name属性分别为p,b,head。也就是<xx开头的,这里的xx就是它的name属性

2.html是一个树状结构的,每个tag都有属性,整个html对象也有name属性,它的属性是:[document]

六、Tag对象:Attributes

1.tag.attrs可以打印出所有的属性,可以看出是个字典格式的

2.那么获取其中的某一个属性,就跟操作字典一样,如:tag["href"]

3.由于class属性一般可以为多个,中间空格隔开,所以class属性获取的是一个list类型:[u'sister']

4.tag.string,这里Tag对象变成NavigableString对象了,呵呵小伙伴们要懵逼了吧。其实打印出来就是一个字符串。

七、发福利

1.爬糗事百科首页的段子

# coding:utf-8
from bs4 import BeautifulSoup
import requests

r = requests.get("https://www.qiushibaike.com/")
qiubai = r.content
soup = BeautifulSoup(qiubai, "html.parser")
duanzi = soup.find_all(class_="content")
for i in duanzi:
    # tag的 .contents 属性可以将tag的子节点以列表的方式输出
    duan = i.span.contents[0]  # 取第一个
    print duan
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档