爬虫(5)-bs4

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序.Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,仅仅需要说明一下原始编码方式就可以了

1.安装

pip install beautifulsoup4
pip install bs4
pip install lxml

2.三大对象

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

  • Tag:通俗点讲就是 HTML 中的一个个标签,例如:<div> <title>
  • NavigableString,
    print(soup.title.string)
    print(soup.title.text)
    
    
  • Comment:Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦

bs4中.string和.text 的区别

1. 在指定标签td,没有子标签,且有文本时,两者的返回结果一致,都是文本

2. 在指定标签td,没有子标签,且没有文本时,.string返回None,.text返回为空

3. 在指定标签td,只有一个子标签时,且文本只出现在子标签之间时,两者返回结果一致,都返回子标签内的文本

4 .最关键的区别,在指定标签td,有子标签,并且父标签td和子标签p各自包含一段文本时,两者的返回结果,存在很大的差异

.string返回为空,因为文本数>=2,string不知道获取哪一个

.text返回的是,两段文本的拼接。
3.find_all方法使用

3.1字符串

传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容

3.2正则表达式

传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容

3.3列表

传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回

3.4keyword

传入一个id 的参数,Beautiful Soup会搜索每个tag的”id”属性

3.5True

True 可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

4.css方法使用

from bs4 import BeautifulSoup
from bs4.element import Comment
html='''
  <title>尚学堂</title>
  <div class='info' float='left'>Welcome to SXT</div>
  <div class='info' float='right'>
        <span>Good Good Study</span>
        <a href='www.bjsxt.cn'></a>
        <strong><!--没用--></strong>
  </div>
  '''
bs=BeautifulSoup(html,'lxml')
print('------获取标签-----')
print(bs.title)
print(bs.div)
print(bs.span)
print('------获取属性-----')
print(bs.div.attrs)
print(bs.a.get('href'))
print(bs.a['href'])
print('------获取内容-----')
print(bs.title.string)
print(bs.title.text)
print(bs.div.string)
print(bs.div.text)
print(bs.a.string)
print(bs.a.text)
print(bs.strong.string)#提取可用内容
print(bs.strong.text)#解析标签
print(type(bs.strong.string))
print(type(bs.strong.text))
print('------打印注释完整内容-----')
if type(bs.strong.string)==Comment:
  print(bs.strong.prettify())

5.bs4_实战

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
url='http://www.people.com.cn/'
hearders={'UserAgent': UserAgent().chrome}
response=requests.get(url, headers=hearders)
response.encoding='gbk'
with open('temp.html','w',encoding='utf-8') as f:
  f.write(response.text)
bs=BeautifulSoup(response.text,'lxml')
inf=bs.select('div[class="xinwen"] > ul >li >a')
for i in inf:
  print(f'{i.text}==={i.get("href")}')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值