python爬虫之bs4网页解析

本文介绍了Python爬虫中BeautifulSoup库的基本使用,包括解析HTML文档、遍历文档树、搜索文档和选择器操作。讲解了如何通过BeautifulSoup获取标签、内容、属性,并展示了find_all方法及正则表达式在搜索中的应用。此外,还提到了选择器如通过标签、类名和ID来定位页面元素。
摘要由CSDN通过智能技术生成

爬虫基础——beautifulsoup

概念:
beautifulSoup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

将复杂的html文档转换成一个复杂的树形结构,每个节点都是python对象,所有对象可以归纳为4种
beautifulsoup4
-tag
-navigableString
-beautifulsoup
-comment
'''

导入包+解析网页
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐使用lxml 解析器。

from bs4 import BeautifulSoup
import re   #正则表达式的包

file=open("./renwu.html","rb")      #rb表示以二进制打开文件用于只读,文件指针放在文件开头
html=file.read().decode("utf-8")   #文件操作,读取
bs=BeautifulSoup(html,"html.parser")#使用html.parser解析器解析html文档

bs对象

print(bs.title)      #打印所有title标签
print(bs.a)
print(bs.head)
print (bs.prettify())  #打印 soup 对象的内容,格式化输出

#1111属性为tag,包含标签及其内容:但是只能找到它能拿到的第一个内容    
print(type(bs.head))  #<class 'bs4.element.Tag'>

#22222此类型为NavigableString,表示为标签里的内容
print(bs.title.string)            #   此为任务1
print(type(bs.title.string))       #     <class 'bs4.element.NavigableString'>

#3333此类型为beautifulsoup
print(type(bs))              #           <class 'bs4.BeautifulSoup'>
#拿到键与属性值
print(bs.a.attrs)             #             {'href': '#'}

#4444此类型为comment,拿到注释里面的内容
print(bs.a.string)              #         导航链接1

bs中常用文档遍历方法

print(bs.head.contents)  #将访问的head里面的元素以列表形式输出
print(bs.head.contents[1])

#关于文档内容的遍历更多内容请搜索BeautifulSoup文档

#文档的搜索
#find_all直接查找所有
#111111字符串过滤,查找所有与字符串完全匹配的内容
t_list=bs.find_all("a")  #将所有超链接放到同一个列表里面


#222222正则表达式搜索,使用search()方法来匹配内容
t_list=bs.find_all(re.compile("a"))   #re.compile表示编译一个正则表达式对象
print(t_list)

#33333方法:传入一个函数,根据函数的方法来搜索
def name_is_sxists(tag):
    return tag.has_attr("name")
t_list=bs.find_all(name_is_sxists)

for item in t_list:
    print(item)

#2  kwargs 关键字  参数

t_list=bs.find_all(id="head")

for item in t_list:
    print(item)


#3   text参数
t_list=bs.find_all(text=re.compile("\d"))   #应用正则表达式来寻找包含特定文本里面的内容


selector 选择器

t_list=bs.select('title')     #通过标签来查找
t_list=bs.select(".mnav")     #通过类名来查找(mnav类)     前面加上'.'
t_list=bs.select("#u1")       #通过id来查找               前面加上'#'
t_list=bs.select("a[class='bri']")    #通过属性来查找    
t_list=bs.select("head > title")   #通过子标签来查找

**find_all( name , attrs , recursive , text , kwargs )
标签名,标签属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值