Beautifulsoup在网页爬虫中的简单使用

1、安装模块
目前Beautiful Soup的最新版本是4.x,之前的版本已经停止开发了,所以这里推荐使用beautifulsoup4。
pip3 install beautifulsoup4

2、安装beautifulsoup解析器
Beautiful Soup的HTML和XML解析器是依赖于lxml库的,所以在使用之前先安装lxml库,推荐使用lxml作为解析器,因为效率更高。
pip3 install lxml

3、创建beautifulsoup对象
from bs4 import beautifulsoup
resp = urllib.request.urlopen(url)
html = resp.read()
bs = beautifulsoup(html,'lxml')

print(bs.prettify())  #格式化html结构,更加美化层次。

4、使用标签获取内容信息
print(bs.title)   #单独获取title标签
print(bs.title.string)  #获取title标签里面的内容。
print(bs.a)  #获取第1个出现a标签的信息,其它a标签不显示
print(bs.a.name)  #获取a标签的名字,也就是“a”
print(bs.a.attrs)  #获取a标签后面的属性如:'href': 'https://www.baidu.com',他是一个字典。
print(bs.a.attrs['href']) #获取标签属性里面的某一个值时,可以使用字典取值法。
print(bs.a.string)  #获取标签尖挎号之间的字符串内容。

5、find_all(name,attrs,recursive,string,**kwargs)
name:对“标签名”进行检索
attrs:对“标签的属性值”进行检索。
recursive:是否对子孙进行检索,默认是True。
string:<>...</>中字符串区域的“字符串”进行检索。
print(bs.find_all(id="content_views"))  #根据标签的ID进行检索。
# print(bs.find_all(string='web'))  #可以检索字符串是否存在。

6、CSS选择器,select
(1)id选择器需要使用#来定位元素,如果想获取标签中含有id='list-2',那可以使用select(#list-2)来定位。
(2)类选择器使用.来定位元素,例如:获取所有的ul标签.list
(3)标签选择器,使用标签来选择,例如获取h4标签,直接h4
(4)混合使用获取第一个ul中的li节点,.panel-body #list-1 li 
html = '''
<div class="panel">
    <div class="panel-heading">
        <h4>Hello</h4>
    </div>
    
    <div class="panel-body">
        <ul class="list" id="list-1">
            <li class="element"> Foo</li>
            <li class="element">Bar</li>
            <li class="element">]ay</li>
        </ul>
        
        <ul class="list list-small" id="list-2">
            <li class="element"> Foo</li>
            <li class="element">Bar</li>
        </ul>
    </div>
</div>
'''
soup = BeautifulSoup(html, 'lxml')
print(soup.select('.panel .panel-heading'))  #获取类标签panel-heading的div。
print(soup.select('ul li'))   #获取所有的li节点
print(soup.select('#list-2 .element'))  #获取id为list-2标签的,而且下面类名为element节点。
print(type(soup.select('ul')[0])) #获取第二个ul节点

7、CSS的高级嵌套方法
for ul in soup.select('ul'):  #先选择一个节点,再获取这个节点下面的子节点。
    print(ul.select('li'))

for li in soup.select("#list-2 li"):   #获取属性。
    print(type(li))
    print(li.attrs)
    print(li.attrs['class'])

for ul in soup.select("#list-2"):
    print(type(ul))
    print(ul.strings)
    print(list(ul.strings))      #['\n', ' Foo', '\n', 'Bar', '\n']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值