bs4解析

  • Post author:
  • Post category:其他


介绍:将一个html文档转换成BeautifulSoup对象,然后通过对象的方法或属性查找指定的节点内容

  • 转换本地文件:

​ soup = BeautifulSoup(fp,’lxml’) fp为文档对象

  • 转换网络文件:

    soup = BeautifulSoup(‘str/bytes’,’lxml’) ‘str/bytes’通常为requests请求方法实例化对象的text或content属性

获取指定内容的方式

1.通过标签(soup.tagName)
1.1 根据标签查找


soup.tagName

查找到第一个符合要求的标签

例如:soup.a 查找到第一个a标签

1.2 获取属性


soup.tagName.attrs

获取标签的所有属性和属性值,

返回一个字典

例如:soup.a.attrs 获取到第一个a标签 所有属性和属性值的一格字典


soup.tagName.attrs['key']

获取上述字典的一个属性值,

通常使用

soup.tagName[attr]

简化上面两个方法,例如:soup.a[‘href’],获取第一个a标签的href属性

1.3 获取内容


soup.a.string

获取a标签的文本内容,如果里面嵌套标签,则为None

`

soup.a.text

获取a下的所有文本(嵌套标签的文本)

`

soup.a.get_text()

2.find与find_all方法
2.1find(‘tagName’,attr)

查找到

第一个

符合attr的‘tagName’标签



soup.find('a')

和soup.a相同, 查找到第一个a标签



soup.find('a', title = 'xxx')

查找第一个title为xxx的标签



soup.find('a',class_ = 'xxx')


注意使用类名时,避免关键字class,这里为class_



soup.find('a',id = 'xxx')

find之后还可以使用string、text和get_text() 例如:

soup.find('a',class = 'xxx').string

同样也可以获取属性,例如:

soup.find('a',id = 'xxx')['href']

2.2find_all



返回的是列表



soup.find_all('a')

返回一个含所有a标签的

列表

,要进一步获取某一个a的属性或内容,先从列表中获 取该元素



soup.find_all(['a','li'])

返回一个含所有a标签和li标签的

列表



soup.find_all('a',limit = 3)

限定前三个a标签 (

和python索引不同

)



soup.find_all('div',class_="xxx")

返回所有类名为”xxx”的div标签

3.select()方法

select() 括号中和前端中的选择器(标签、类、id….)类似,select返回的也是列表


select('#id')


select('.class')


select('ul li')


select('div > span > a')

bs4解析练习

import requests 
from bs4 import BeautifulSoup
url = 'https://www.coolapk.com/'
response = requests.get(url = url)
ht = response.text
soup = BeautifulSoup(ht,'lxml')
soup.a  

<a href="/">
<span id="header-logo" style="display: flex;justify-content: left;align-items: center;"><img alt="" src="/static/images/header-logo.png" style="height: 35px;margin-right: 10px;"/><span>酷安</span></span>
</a>

soup.a.attrs   #{'href': '/'}
soup.a['herf']  # /
soup.a.string   #None
soup.a.text    #酷安
souo.a.get_text()   #酷安

soup.find('li',id="navbar-apk")       #<li id="navbar-apk"><a href="/apk/">应用</a></li>
soup.find('li',id="navbar-apk").string       #应用
soup.find('img',class_='logo')['src']           #/static/images/coolapklogo.png
soup.find_all('div',class_="weui-flex",limit = 2)

#结果
[<div class="weui-flex logo-box">
<div class="weui-flex__item">
<img alt="酷安" class="logo" src="/static/images/coolapklogo.png"/>
</div>
</div>, <div class="weui-flex">
<div class="weui-flex__item">
<p class="title">全新酷安V9</p>
<p class="sub-title mobile-display">和你一起,发现科技新生活</p>
<p class="sub-title pc-display">和你一起,<br/>发现科技新生活</p>
</div>
</div>]

div_L = soup.find_all('li',limit = 6)
for i in div_L:
    print(i.text)
#结果
首页
应用
游戏
酷安手机APP
联系酷安
关于酷安

soup.select('.footer-navbar ul li a')
for i in tag_a_L:
    print(i['href'])
#结果:
/about/about.html
/about/contact.html
/about/jobs.html
/about/copyright.html
/apk/com.coolapk.market?from=footer
https://developer.coolapk.com?from=footer

转载于:https://www.cnblogs.com/notfind/p/11465201.html