python 爬虫之BeautifulSoup 二

[复制链接]
yinfeifei 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
昨天给大家聊了一下,BeautifulSoup 库的安装,以及一些基本概念,相信大家对于 BeautifulSoup 也已经有了一些简单的了解,那么今天我们就一起来看一下 BeautifulSoup 的一些吊炸天的方法吧。7 @' }, V$ u; K1 ]# W& k' k
( j' M- Y& g/ X$ [8 ]  X0 i
demo8 C( W% }+ L% K; O
<html><head><title>This is a python demo page</title></head>5 @  g5 l( N) _& s6 w! `
<body>; |/ W* Y$ x* s: U5 E! |
<p class="title"><b>The demo python introduces several python courses.</b></p>
! J. i5 X/ h) i  P) M9 v <p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
% m6 I9 x  I, l9 ] <a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Python</a> and <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Python</a>.</p>
6 ^, l5 ?- X; P1 M8 L& r; D9 v </body></html>
7 E) J7 b5 R. L, |  L% m* R; A, H$ W
开始之前,大家先来看这样一段代码,这是我截取的一段网页源代码,是用 html 写的,大家将其以 “.html”为后缀名保存,再用浏览器打开,能够看到这样的效果。; @4 ~- V' v! `& \
, r4 v6 T' r0 h& B: v; B8 I; X
demo.html5 T5 o8 V+ U9 i6 I- s4 g
是不是,可以这样说,浏览器,将其接受到的网页源代码,翻译成了我们看到的可视化的界面;是的,其实浏览器的视角和我们人类是不一样的,ta 并不认识我们人类世界的形象实物,ta 认识的只是一段一段的按照一定语法编辑好的类似于 html 这样的代码。但是 ta 能够将这种代码再转化成我们熟悉的图片,文字,图形。所以当我们每次去请求的时候,请求得到的都是这样的网页源代码。其实上面这个网页是真实存在的,是一个教学网站提供的 demo ,大家可以输入网址浏览一下,然后,通过 requests.get() 请求这个页面,看得到的是不是我上面给大家的那段源代码。* l5 ^6 K( H9 w* m% q& q2 c: f
http://www.python123.io/ws/demo.html
- y& B0 b3 ]/ C0 o, V
那么这样,我们就需要从网页源代码中找到我们需要的数据,因为你不可能奢望每个人都精通网页设计,然后从一篇一篇的网页源代码中,一点点找到自己想要的数据。
! P) l" X8 t! }5 G9 d2 m2 H那么,怎么找呢?假设现在我是你的老板,我需要你将这个页面的那个小标题提取出来,你该怎么实现呢?# a# ~4 d0 [8 g3 C, B4 s
。。。。。。思考五分钟& u4 l2 z  k! i' J' x5 l9 v
/ k+ J; A" Z% D$ ]

$ {4 W( j4 T% n" z9 S9 D! N/ ~& s8 `实现方法
1 K7 O* b) E' s这是我给出的实现方法(只给图片,不给源码,是希望大家能自己手动输一遍,我机智吧,哈哈哈),大家来看一下这段代码,前面四条语句我就不解释了,应该能看懂,从第五句开始,我将 r.text 的内容煲出了一个 BeautifulSoup 类,也就是 soup ,紧接着,我调用了 soup 的 find 方法,说到这里,什么是 find 方法呢?所谓 find 就是查找,查找标签树中的 ‘p’ 这个标签,不过,这个 find 方法只会查找一个,当找到第一个的时候就猴急猴急的返回,我们通过阅读之前的 html 源码可以发现,要找的那个内容正好是在第一个 p 标签内。所以就将我们需要的返回了,如果我们要找的不是第一个怎么办呢?BeautifulSoup 还提供了一个 find_all()的方法,这个方法会遍历整个标签树,然后将找到的内容以列表的形式返回。* }9 _% x: @5 {8 [- g) e7 T5 E
拿到了,第一个标签是不够的,因为标签的内容是这样的:. r2 F8 x* q6 `# y$ o$ c, Z
. ~9 Z" Q& Z8 t6 K1 ?" [4 A
<p class="title"><b>The demo python introduces several python courses.</b></p>
5 J1 T7 ~6 Y3 p4 c# ]4 o1 h& W
% m8 }6 h9 @8 ]1 H  Y9 S& B
我们还需要将其中的那段文字内容提取出来,BeautifulSoup 类包含了一些基本元素,string就是期中之一,string代表的是标签之间的非属性字符串内容,我们可以直接通过元素名取出其中的内容,是不是很方便啊
$ X% [5 N- d: J
6 r9 J$ p' h, v& LBeautifulSoup的元素
) M( V* \9 Q% k( T* |+ l, E4 z大家应该还记得,response对象有一个 text 元素吧,其实 BeautifulSoup 对象也有一个 text 元素,这个元素就是将 soup 中的所有文本内容提取出来。
/ K/ f. g5 r+ V/ h5 A) H  G
. f, S; ^2 U( E6 \& Z) o& R7 [$ s1 f. n- c) i8 |& z6 {& i
text( X; d3 T7 Y; W3 Y! M" s3 \
是不是很神奇,赶紧去试一下吧!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图