bs4解析
介绍:将一个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
bs4解析的更多相关文章
- bs4解析库
beautifulsoup4 bs4解析库是灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便地实现网页的提取 要解析的html标签 from bs4 import B ...
- bs4 解析 以及用法
bs4解析 bs4: 环境安装: lxml bs4 bs4编码流程: 1.实例化一个bs4对象,且将页面源码数据加载到该对象中 2.bs相关的方法或者属性实现标签定位 3.取文本或者取属性 bs的属性 ...
- Python3.x:bs4解析html基础用法
Python3.x:bs4解析html基础用法 代码: import urllib.request from bs4 import BeautifulSoup import re url = r'ht ...
- 爬虫的三种解析方式(正则解析, xpath解析, bs4解析)
一 : 正则解析 : 常用正则回顾: 单字符: . : 除换行符以外的所有字符 [] : [aoe] [a-w] 匹配集合中任意一个字符 \d : 数字 [0-9] \D : 非数字 \w : 非数字 ...
- 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 ...
- 爬虫系列二(数据清洗--->bs4解析数据)
一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...
- pytho爬虫使用bs4 解析页面和提取数据
页面解析和数据提取 关注公众号"轻松学编程"了解更多. 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值.内容一般分为两部分,非结构化的数据 和 结构化的 ...
- bs4解析要获取被注掉的部分需先将注释符号去掉
<div class="xzcf-content"> <div id="sfxz"> <div class="main- ...
- 爬虫的两种解析方式 xpath和bs4
1.xpath解析 from lxml import etree 两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点 (1)本地文件 tree = etree.parse(文 ...
随机推荐
- Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
code: 将 Stu* pStu = malloc(sizeof(Stu)); 改为Stu* pStu = (Stu*)malloc(sizeof(Stu)); code #include < ...
- Dockerfile HEALTHCHECK详解
Dockerfile中使用HEALTHCHECK的形式有两种: 1.HEALTHCHECK [options] CMD command(本次详细解释) 2.HEALTHCHECK NODE 意思是禁止 ...
- 作妖 | "该文件没有与之关联的程序来执行该操作..."的解决方法(删除快捷方式小箭头所致)
文章目录 开始作妖 后悔作妖 终结作妖 开始作妖 这是次很作妖的体验过程.因为重新换了个系统,看着桌面上这些快捷方式都有个讨人嫌的小箭头,就在网上搜了搜解决办法. 比如,将下面的内容复制到记事本中,再 ...
- vue---vue2.x自定义plugin,给vue添加全局方法,原型上增加全局方法
1. 自定义plugin.js export default{ install(Vue,options); { Vue.prototype.toStringTwo=(str)=>( ('0000 ...
- mac kafka 环境搭建 以及PHP的kafka扩展
1.kafka安装 brew install kafka 安装会依赖zookeeper. 注意:安装目录:/usr/local/Cellar/kafka/0.10.2.0 2.安装的配置文件位置 /u ...
- 简易的CRM系统案例之Servlet+Jsp+MySQL版本
数据库配置 datebase.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/infos usernam ...
- java-selenium 框架例子
package mavenweb2; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.o ...
- mycat 实现读写分离
mycat 实现读写分离 配置mysql实现主从复制 安装jdk 安装mycat实现读写分离 tar zxf Mycat-server-1.6-RELEASE-20161028204710-sangn ...
- C#RSA加密解密(对接PHP)
上篇文章中写的RSA加密是针对C#的,现在外部调用的是PHP,我们平常见到的RSA无论公钥和私钥都是一长串数字,很显然C#生成的XML不是通用的加密.如果外部调用需要处理一下. 一.首先可以去网上找一 ...
- 如何去除PATH里的重复项并排序
注意sed的用法,linux和Mac os不同,linux是Gnu的,Mac是BSD的 PATH排序去掉重复内容 mac和linux的换行符替换方法不一样,如下是Mac下的操作 export PATH ...