美文网首页
2019-02-24

2019-02-24

作者: 拉一曲扯淡 | 来源:发表于2019-02-24 23:24 被阅读0次

今天有朋友问到了BeautifulSoup的一个用法,于是我心血来潮,准备将BeautifulSoup的基本用法在这写写。

安装不多说,windows下打开cmd直接:

pip install BeautifulSoup4

测试是否成功安装,在IDE下:

from bs4 import BeautifulSoup

导入就是成功安装了。

这里我们用的解析器是lxml,没有lxml的话要先安装lxml:pip install lxml

首先实例化一个解析对象。我这里是用requests库请求https://www.taobao.com,来做测试的。

到这里我先说下我最终的需求:

提取淘宝首页导航条的各个条目及其连接。

#请求淘宝首页

import requests

html = requests.get('https://www.taobao.com').text

#实例化解析对象

soup = BeautifulSoup(html,'lxml')  #后面的那个参数是指定解析库

获取节点

>>soup.ul
#即可匹配到第一个ul节点的内容

<ul class="site-nav-bd-l" data-spm-ab="1" id="J_SiteNavBdL">

<li class="site-nav-menu site-nav-login" data-name="login" data-spm="754894437" id="J_SiteNavLogin">

<div class="site-nav-menu-hd">

<a href="//login.taobao.com/member/login.jhtml?f=top&amp;redirectURL=https%3A%2F%2Fwww.taobao.com%2F" target="_top">

<span>亲,请登录</span>

</a>

</div>

</li>

<li class="site-nav-tmsg tmsg site-nav-multi-menu J_MultiMenu" data-name="tmsg" data-spm="1997563201" id="J_Tmsg">

省略部分内容

</li>

</ul>

#因为soup.ul的结果还是tag类型,所以我们可以链式的查找下级节点。

>>type(soup.ul)

#<class 'bs4.element.Tag'>

>>soup.ul.li

<li class="site-nav-menu site-nav-login" data-name="login" data-spm="754894437" id="J_SiteNavLogin">

<div class="site-nav-menu-hd">

<a href="//login.taobao.com/member/login.jhtml?f=top&amp;redirectURL=https%3A%2F%2Fwww.taobao.com%2F" target="_top">

<span>亲,请登录</span>

</a>

</div>

</li>

#以上是获取单个节点的方法

获取属性和文本 - 承上

获取属性有两种方式。
>>soup.ul.li.a['href']     #获取a节点的href属性

'//login.taobao.com/member/login.jhtml?f=top&redirectURL=https%3A%2F%2Fwww.taobao.com%2F'

也可以这样写...

>>soup.ul.li.a.attrs['href']   

'//login.taobao.com/member/login.jhtml?f=top&redirectURL=https%3A%2F%2Fwww.taobao.com%2F'

>>soup.span.string     #这里就将span节点内的文本内容提取出来了。

'亲,请登录'

子节点,子孙节点,兄弟节点,父节点,祖辈节点

contents

children

descendents

parent

parents

next_sibling

previous_sibling

next_siblings

previous_siblings

find_all(),find()

bs4还给我们提供了方法选择器:

API  :  find_all(name,attrs,recursive,text,**kwargs)

CSS选择器:这个很强大

soup.select()

今天先把框架写好吧,有点晚了,改天有时间再补全

相关文章

网友评论

      本文标题:2019-02-24

      本文链接:https://www.haomeiwen.com/subject/pfeiyqtx.html