爬虫架构-bs4

爬虫架构-bs4

方便解析Html、xml等格式的源码,快速查询、修改等操作,节省数小时乃至更多的工作时间

官网文档

https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

from bs4 import BeautifulSoup
print('path-',BeautifulSoup)
path- <class 'bs4.BeautifulSoup'>

html源代码

非真实网页

html_doc = '<html><head><title>我是哥,你是啥</title></head><body><a id="baidu">百度</a><a class="ali">阿里</a><p>夏日炎炎,要你干嘛</p></body></html>'

BS类解析html源码,使用解析器

解析器:

  • html.parser

  • html5lib

soup = BeautifulSoup(html_doc,'html5lib')
print(soup.title)
<title>我是哥,你是啥</title>

一、对象的种类

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

soup.tagname

print(type(soup.title))
<class 'bs4.element.Tag'>
print(soup.head)
print(soup.p)
print(soup.a)
<head><title>我是哥,你是啥</title></head>
<p>夏日炎炎,要你干嘛</p>
<a id="baidu">百度</a>

soup.tagname.string | soup.tagname.text

  • 作用:获取标签内部的文本

  • string 只可以获取一个子节点文本

  • text 可以获取多个子节点文本

print(soup.head.string)
print(soup.p.text)
print(soup.a.text)
我是哥,你是啥
夏日炎炎,要你干嘛
百度

soup.tagname.attrs属性

  • 作用:查看标签的属性集合的结构,可以使用字典的方式获取属性的值
  • attrs[key]
  • get(key)
print(soup.a.attrs)
print(soup.a.attrs['id'])
print(soup.a.get('id'))
{'id': 'baidu'}
baidu
baidu

二、高级查询方式

可以通过查询函数获取单个及多个满足条件的标签

  • find_all() 查询函所有满足条件的标签,返回列表[tag,tag,…]
  • find()
  • select()
  • select_one()

a_list  = soup.find_all(name="a")
print(a_list)

a_list  = soup.find_all(name=['a','p'])
print(a_list)




a_list  = soup.find_all(name="a",attrs={'id':'link1'}) #选择返回的属性
print(a_list)

a_list  = soup.find_all(name="a",limit=1) #返回列表的长度:1
print(a_list)
a_list  = soup.find(name="a",attrs={'id':'link1'}) # 返回标签
print(a_list)

css语法选择器

tag 标签选择 tagname{}
class类型选择 .class{}
id选择 #id{}
派生语法 tag\id\class

a_list = soup.select("a")
print(a_list)
a_list = soup.select("a#baidu")
print(a_list)
a_list = soup.select("a.ali")
print(a_list)
a_list = soup.select("body #baidu")
print(a_list)
[<a id="baidu">百度</a>, <a class="ali">阿里</a>]
[<a id="baidu">百度</a>]
[<a class="ali">阿里</a>]
[<a id="baidu">百度</a>]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q J X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值