python爬虫-BeautifulSoup

BeautifulSoup是将复杂的HTML文档转化为一个复杂的树形结构,每个节点都是python对象,可以归纳为以下四种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

注:以下的baidu.html是以baidu首页为例。

1.文档内容的获取

Tag

找到网页对应的标签及其内容

file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser")  # 对html文档进行解析,解析器是:html.parser
print(bs.title)
print(bs.a)
print(bs.head)
result---------------------------------
<title>百度一下,你就知道</title>
<a class="toindex" href="/">百度首页</a>

NavigableString

找到对应标签里匹配内容

from bs4 import BeautifulSoup

file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser")  # 对html文档进行解析,解析器是:html.parser
print(bs.title.string)# 标签下的内容
print(bs.a.string)
print(bs.head.string)
print(bs.a.attrs) # 标签的属性值
result----------------------------------
百度一下,你就知道
百度首页
{'class': ['toindex'], 'href': '/'}
# 这里发现,只把内容解析出来了,标签都没有保存

BeautifulSoup

整个bs就是BeautifulSoup

Comment

comment代表是注释,是一种特殊的NavigableString。当解析的时候,一些注释的内容不会被解析出来,进而看起来和NavigableString的内容是一样的,但是他们的数据类型是不一样的。

2.文档内容的遍历

find_all()

find_all都是根据标签tag来匹配的
1-直接查找对应的tag节点名字

t_list = bs.find_all('a')

2-利用正则表达式,只要tag包含某个字母就可以匹配

t_list = bs.find_all(re.compile('a'))

kwargs参数匹配

from bs4 import BeautifulSoup

file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser")  # 对html文档进行解析,解析器是:html.parser

t_list = bs.find_all(id='head') # 根据id='head'进行匹配
t_list_ = bs.find_all(class_=True) # 判断是不是有class这么一项
print(t_list)
print(t_list_)

text文本参数匹配

文本参数我目前的理解是显示在人眼前的那些数据。

CSS选择器

from bs4 import BeautifulSoup

file = open("baidu.html", 'r', encoding='utf-8')
html = file.read()
bs = BeautifulSoup(html, "html.parser")  # 对html文档进行解析,解析器是:html.parser

t_list = bs.select('title')  # 根据标签来查找
t_list = bs.select('.mnav')  # 通过类名来查找
t_list = bs.select('#u1')  # 通过ID来查找
t_list = bs.select("a[class='bri']")  # 通过属性来查找
t_list = bs.select('head > title')  # 通过子标签来查找,查找head下面的title的内容
t_list = bs.select('.manv ~ bri')  # 通过兄弟节点来进行查找
for item in t_list:
    print(item)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值