介绍:将一个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解析练习

  1. import requests
  2. from bs4 import BeautifulSoup
  3. url = 'https://www.coolapk.com/'
  4. response = requests.get(url = url)
  5. ht = response.text
  6. soup = BeautifulSoup(ht,'lxml')
  7. soup.a

  1. <a href="/">
  2. <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>
  3. </a>

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

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

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

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

  1. soup.select('.footer-navbar ul li a')
  2. for i in tag_a_L:
  3. print(i['href'])
  4. #结果:
  5. /about/about.html
  6. /about/contact.html
  7. /about/jobs.html
  8. /about/copyright.html
  9. /apk/com.coolapk.market?from=footer
  10. https://developer.coolapk.com?from=footer

bs4解析的更多相关文章

  1. bs4解析库

    beautifulsoup4 bs4解析库是灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便地实现网页的提取 要解析的html标签 from bs4 import B ...

  2. bs4 解析 以及用法

    bs4解析 bs4: 环境安装: lxml bs4 bs4编码流程: 1.实例化一个bs4对象,且将页面源码数据加载到该对象中 2.bs相关的方法或者属性实现标签定位 3.取文本或者取属性 bs的属性 ...

  3. Python3.x:bs4解析html基础用法

    Python3.x:bs4解析html基础用法 代码: import urllib.request from bs4 import BeautifulSoup import re url = r'ht ...

  4. 爬虫的三种解析方式(正则解析, xpath解析, bs4解析)

    一 : 正则解析 : 常用正则回顾: 单字符: . : 除换行符以外的所有字符 [] : [aoe] [a-w] 匹配集合中任意一个字符 \d : 数字 [0-9] \D : 非数字 \w : 非数字 ...

  5. python bs4解析网页时 bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to inst(转)

    Python小白,学习时候用到bs4解析网站,报错 bs4.FeatureNotFound: Couldn't find a tree builder with the features you re ...

  6. 爬虫系列二(数据清洗--->bs4解析数据)

    一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...

  7. pytho爬虫使用bs4 解析页面和提取数据

    页面解析和数据提取 关注公众号"轻松学编程"了解更多. 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值.内容一般分为两部分,非结构化的数据 和 结构化的 ...

  8. bs4解析要获取被注掉的部分需先将注释符号去掉

    <div class="xzcf-content"> <div id="sfxz"> <div class="main- ...

  9. 爬虫的两种解析方式 xpath和bs4

    1.xpath解析 from lxml import etree 两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点 (1)本地文件 tree = etree.parse(文 ...

随机推荐

  1. JavaScript 判断是否为空

    // var a = ""; // var a = " "; // var a = null; // var a = undefined; // var a = ...

  2. 多项式求逆/分治FFT 学习笔记

    一.多项式求逆 给定一个多项式 \(F(x)\),请求出一个多项式 \(G(x)\), 满足 \(F(x) * G(x) \equiv 1 ( \mathrm{mod\:} x^n )\).系数对 \ ...

  3. 【SPOJ】Distinct Substrings

    [SPOJ]Distinct Substrings 求不同子串数量 统计每个点有效的字符串数量(第一次出现的) \(\sum\limits_{now=1}^{nod}now.longest-paren ...

  4. C++标准库分析总结(五)——<Deque、Queue、Stack设计原则>

    本节主要总结标准库Deque的设计方法和特性以及相关迭代器内部特征 1.Deque基本结构 Deque(双向队列)也号称连续空间(其实是给使用者一个善意的谎言,只是为了好用),其实它使用分段拼接起来的 ...

  5. 使用python2 对服务器监控(监控内存,CPU,网卡流量等)

    #!/usr/bin/env python # -*- coding:utf- -*- #create at -- 'this is a system monitor scripts' __autho ...

  6. SCHED_FIFO与SCHED_OTHER调度机制

    疑问 两个线程分别有不同的调度策略,一个SCHED_FIFO,一个SCHED_OTHER,按照之前的理解,SCHED_FIFO实时线程一定会占用CPU一直运行,导致SCHED_OTHER的普通线程得不 ...

  7. Alpha项目冲刺! Day3-产出

    各个成员今日完成的任务 林恩:任务分工,博客撰写,完善设置等模块 杨长元:安卓本地数据库基本建立 李震:完成注册页面 胡彤:完善服务端 寇永明:画图,学习 王浩:画图,学习 李杰:画图,学习 各个成员 ...

  8. 【Python 脚本报错】AttributeError: 'module 'yyy' has no attribute 'xxx'的解决方法

    先参考这篇记录大概理解了原因, 再深入了解下python的import机制, 发现自己的模块之间存在互相import. 比如,A.py中import B,而B.py中也import A了, 现在执行模 ...

  9. appium 小程序自动化测试

    https://www.cnblogs.com/yoyoketang/p/9144987.html adb shell su ACTIVITY com.tencent.mm/.plugin.appbr ...

  10. Error: unable to load xmlsec-openssl library

    yum install libxml2-devel xmlsec1-devel xmlsec1-openssl-devel libtool-ltdl-devel